diff --git a/runtime/internal/clite/syscall/fs_wasip1.go b/runtime/internal/clite/syscall/fs_wasip1.go index d40c9ca7..1e7e3e2d 100644 --- a/runtime/internal/clite/syscall/fs_wasip1.go +++ b/runtime/internal/clite/syscall/fs_wasip1.go @@ -7,7 +7,6 @@ package syscall import ( - "strings" "structs" "unsafe" ) @@ -297,11 +296,19 @@ func joinPath(dir, file string) string { } func isAbs(path string) bool { - return strings.HasPrefix(path, "/") + return hasPrefix(path, "/") } func isDir(path string) bool { - return strings.HasSuffix(path, "/") + return hasSuffix(path, "/") +} + +func hasPrefix(s, prefix string) bool { + return len(s) >= len(prefix) && s[:len(prefix)] == prefix +} + +func hasSuffix(s, suffix string) bool { + return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix } type Stat_t struct { diff --git a/runtime/internal/clite/syscall/syscall.go b/runtime/internal/clite/syscall/syscall.go index e140e387..8fef3e38 100644 --- a/runtime/internal/clite/syscall/syscall.go +++ b/runtime/internal/clite/syscall/syscall.go @@ -24,7 +24,7 @@ import ( ) const ( - LLGoPackage = "noinit" + LLGoPackage = true ) var ( @@ -74,3 +74,25 @@ func Kill(pid int, signum Signal) error { func ProcExit(code int32) { panic("not implemented") } + +func _utoa(buf []byte, val uint64) []byte { + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return buf[i:] +} + +func utoa(val uint64) string { + return string(_utoa(make([]byte, 20), val)) +} + +func itoa(val int64) string { + if val < 0 { + return "-" + string(_utoa(make([]byte, 20), uint64(-val))) + } + return string(_utoa(make([]byte, 20), uint64(val))) +} diff --git a/runtime/internal/clite/syscall/syscall_unix.go b/runtime/internal/clite/syscall/syscall_unix.go index 007edd9d..63bf4ce9 100644 --- a/runtime/internal/clite/syscall/syscall_unix.go +++ b/runtime/internal/clite/syscall/syscall_unix.go @@ -2,8 +2,6 @@ package syscall -import "strconv" - type Errno uintptr func (e Errno) Error() string { @@ -13,7 +11,7 @@ func (e Errno) Error() string { return s } } - return "errno " + strconv.Itoa(int(e)) + return "errno " + utoa(uint64(e)) } func (e Errno) Is(target error) bool { @@ -51,5 +49,5 @@ func (s Signal) String() string { return str } } - return "signal " + strconv.Itoa(int(s)) + return "signal " + itoa(int64(s)) } diff --git a/runtime/internal/clite/syscall/syscall_wasm.go b/runtime/internal/clite/syscall/syscall_wasm.go index d37bfef1..d04fe14f 100644 --- a/runtime/internal/clite/syscall/syscall_wasm.go +++ b/runtime/internal/clite/syscall/syscall_wasm.go @@ -5,7 +5,6 @@ package syscall import ( - "strconv" "unsafe" ) @@ -79,7 +78,7 @@ func (e Errno) Error() string { return s } } - return "errno " + strconv.Itoa(int(e)) + return "errno " + utoa(uint64(e)) } func (e Errno) Is(target error) bool { @@ -209,7 +208,7 @@ func (s Signal) String() string { case SIGSYS: return "bad system call" default: - return "signal " + strconv.Itoa(int(s)) + return "signal " + utoa(uint64(s)) } }