mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 03:27:48 +00:00
os: implement Getwd
This commit is contained in:
committed by
GitHub
parent
98fbf7ff25
commit
b1ec8eb2e0
+1
-2
@@ -196,9 +196,8 @@ func Lstat(name string) (FileInfo, error) {
|
||||
return nil, &PathError{"lstat", name, ErrNotImplemented}
|
||||
}
|
||||
|
||||
// Getwd is a stub (for now), always returning an empty string
|
||||
func Getwd() (string, error) {
|
||||
return "", nil
|
||||
return syscall.Getwd()
|
||||
}
|
||||
|
||||
// Readlink is a stub (for now), always returning the string it was given
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
// +build baremetal wasi wasm
|
||||
|
||||
// This file emulates some file-related functions that are only available
|
||||
// under a real operating system.
|
||||
|
||||
package syscall
|
||||
|
||||
func Getwd() (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// +build !baremetal,!wasi,!wasm
|
||||
|
||||
// This file assumes there is a libc available that runs on a real operating
|
||||
// system.
|
||||
|
||||
package syscall
|
||||
|
||||
const pathMax = 1024
|
||||
|
||||
func Getwd() (string, error) {
|
||||
var buf [pathMax]byte
|
||||
s := libc_getcwd(&buf[0], uint(len(buf)))
|
||||
if s == nil {
|
||||
return "", getErrno()
|
||||
}
|
||||
n := clen(buf[:])
|
||||
if n < 1 {
|
||||
return "", EINVAL
|
||||
}
|
||||
return string(buf[:n]), nil
|
||||
}
|
||||
|
||||
// char *getcwd(char *buf, size_t size)
|
||||
//export getcwd
|
||||
func libc_getcwd(buf *byte, size uint) *byte
|
||||
@@ -22,3 +22,13 @@ func uitoa(val uint) string {
|
||||
buf[i] = byte(val + '0')
|
||||
return string(buf[i:])
|
||||
}
|
||||
|
||||
// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.
|
||||
func clen(n []byte) int {
|
||||
for i := 0; i < len(n); i++ {
|
||||
if n[i] == 0 {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return len(n)
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ const (
|
||||
EEXIST Errno = 0x11
|
||||
EINTR Errno = 0x4
|
||||
ENOTDIR Errno = 0x14
|
||||
EINVAL Errno = 0x16
|
||||
EMFILE Errno = 0x18
|
||||
EAGAIN Errno = 0x23
|
||||
ETIMEDOUT Errno = 0x3c
|
||||
|
||||
Reference in New Issue
Block a user