os: implement Getwd

This commit is contained in:
Federico G. Schwindt
2021-10-04 23:14:09 +01:00
committed by GitHub
parent 98fbf7ff25
commit b1ec8eb2e0
5 changed files with 47 additions and 2 deletions
+1 -2
View File
@@ -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
+10
View File
@@ -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
}
+25
View File
@@ -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
+10
View File
@@ -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)
}
+1
View File
@@ -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