From 5e2ae75eb72a62985e086eed33a5982a929e4fff Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Fri, 11 Nov 2016 16:39:39 -0500 Subject: [PATCH] go/ssa/interp: add syscall.Readlink intrinsic, needed by os package Change-Id: Ie408fd5ffb2be2d60773eb3fda91912887df0a7e Reviewed-on: https://go-review.googlesource.com/33147 Reviewed-by: Robert Griesemer --- go/ssa/interp/external.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/go/ssa/interp/external.go b/go/ssa/interp/external.go index 06cf514d..8b33f25c 100644 --- a/go/ssa/interp/external.go +++ b/go/ssa/interp/external.go @@ -142,6 +142,7 @@ func init() { "syscall.RawSyscall": ext۰syscall۰RawSyscall, "syscall.Read": ext۰syscall۰Read, "syscall.ReadDirent": ext۰syscall۰ReadDirent, + "syscall.Readlink": ext۰syscall۰Readlink, "syscall.Stat": ext۰syscall۰Stat, "syscall.Write": ext۰syscall۰Write, "syscall.runtime_envs": ext۰runtime۰environ, @@ -485,6 +486,13 @@ func ext۰syscall۰Getpid(fr *frame, args []value) value { return syscall.Getpid() } +func ext۰syscall۰Readlink(fr *frame, args []value) value { + path := args[0].(string) + buf := valueToBytes(args[1]) + n, err := syscall.Readlink(path, buf) + return tuple{n, wrapError(err)} +} + func valueToBytes(v value) []byte { in := v.([]value) b := make([]byte, len(in))