type syscallErrorType = syscall.Errno
-const errENOSYS = syscall.ENOSYS
-const errERANGE = syscall.ERANGE
+const (
+ errENOSYS = syscall.ENOSYS
+ errERANGE = syscall.ERANGE
+ errENOMEM = syscall.ENOMEM
+)
var errENOSYS = syscall.NewError("function not implemented")
var errERANGE = syscall.NewError("out of range")
+var errENOMEM = syscall.NewError("cannot allocate memory")
}
}
// Linux returns ENAMETOOLONG if the result is too long.
- // BSD systems appear to return EINVAL.
+ // Some BSD systems appear to return EINVAL.
+ // FreeBSD systems appear to use ENOMEM
// Solaris appears to use ERANGE.
- if err != syscall.ENAMETOOLONG && err != syscall.EINVAL && err != errERANGE {
+ if err != syscall.ENAMETOOLONG && err != syscall.EINVAL && err != errERANGE && err != errENOMEM {
return dir, NewSyscallError("getwd", err)
}
}
import (
"errors"
. "os"
+ "runtime"
"strings"
"syscall"
"testing"
wd, err := Getwd()
t.Logf("Getwd len: %d", len(wd))
if err != nil {
+ // We can get an EPERM error if we can't read up
+ // to root, which happens on the Android builders.
+ if errors.Is(err, syscall.EPERM) {
+ t.Logf("ignoring EPERM error: %v", err)
+ break
+ }
t.Fatal(err)
}
if setPWD && wd != dir {
// all Unix platforms (4096, on Linux).
if _, err := Stat(wd); err != nil || len(wd) > 4096 {
t.Logf("Done; len(wd)=%d", len(wd))
- if err != nil && !errors.Is(err, syscall.ENAMETOOLONG) {
+ // Most systems return ENAMETOOLONG.
+ // Dragonfly returns EFAULT.
+ switch {
+ case err == nil:
+ case errors.Is(err, syscall.ENAMETOOLONG):
+ case runtime.GOOS == "dragonfly" && errors.Is(err, syscall.EFAULT):
+ default:
t.Fatalf("unexpected Stat error: %v", err)
}
break