From bde7ba57b06eb46f8901454e12524a74a8c3b6e8 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Fri, 8 Jun 2018 00:47:48 +0200 Subject: darwin does not have PATH_MAX Define our own, with the value from Linux. --- daemonize.go | 2 +- internal/fusefrontend_reverse/rfs.go | 3 +-- internal/syscallcompat/sys_common.go | 2 ++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/daemonize.go b/daemonize.go index 5215b2c..40d9b64 100644 --- a/daemonize.go +++ b/daemonize.go @@ -29,7 +29,7 @@ func exitOnUsr1() { func forkChild() int { name := os.Args[0] // Use the full path to our executable if we can get if from /proc. - buf := make([]byte, syscall.PathMax) + buf := make([]byte, syscallcompat.PATH_MAX) n, err := syscall.Readlink("/proc/self/exe", buf) if err == nil { name = string(buf[:n]) diff --git a/internal/fusefrontend_reverse/rfs.go b/internal/fusefrontend_reverse/rfs.go index b281c76..829983b 100644 --- a/internal/fusefrontend_reverse/rfs.go +++ b/internal/fusefrontend_reverse/rfs.go @@ -333,8 +333,7 @@ func (rfs *ReverseFS) Readlink(relPath string, context *fuse.Context) (string, f cTarget := rfs.nameTransform.B64.EncodeToString(cBinTarget) // The kernel will reject a symlink target above 4096 chars and return // and I/O error to the user. Better emit the proper error ourselves. - const PATH_MAX = 4096 // not defined on Darwin - if len(cTarget) > PATH_MAX { + if len(cTarget) > syscallcompat.PATH_MAX { return "", fuse.Status(syscall.ENAMETOOLONG) } return cTarget, fuse.OK diff --git a/internal/syscallcompat/sys_common.go b/internal/syscallcompat/sys_common.go index 21823ef..77cdb07 100644 --- a/internal/syscallcompat/sys_common.go +++ b/internal/syscallcompat/sys_common.go @@ -6,6 +6,8 @@ import ( "golang.org/x/sys/unix" ) +const PATH_MAX = 4096 // not defined on Darwin + // Readlinkat exists both in Linux and in MacOS 10.10+. We may add an // emulated version for users on older MacOS versions if there is // demand. -- cgit v1.2.3