From 4798a8a5560552480efde5fe8b1f7963a25a96d3 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 5 Feb 2018 21:14:32 +0100 Subject: 9pfuse: fix handling of access mode (thanks Kenji Arisawa) Fixes #81. --- src/cmd/9pfuse/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/cmd/9pfuse') diff --git a/src/cmd/9pfuse/main.c b/src/cmd/9pfuse/main.c index cbce3ffd..a3662898 100644 --- a/src/cmd/9pfuse/main.c +++ b/src/cmd/9pfuse/main.c @@ -505,7 +505,9 @@ fusesetattr(FuseMsg *m) if(in->valid&FATTR_MTIME) d.mtime = in->mtime; if(in->valid&FATTR_MODE) - d.mode = in->mode; + d.mode = in->mode & 0777; + if((in->mode&S_IFMT) == S_IFDIR) + d.mode |= DMDIR; if((in->valid&FATTR_UID) || (in->valid&FATTR_GID)){ /* * I can't be bothered with these yet. -- cgit v1.2.3 From 112744e54bfdab025bd2146457f41f1f8f4a903b Mon Sep 17 00:00:00 2001 From: Xiao-Yong Jin Date: Wed, 14 Mar 2018 20:27:46 -0500 Subject: 9pfuse: retries read(3) upon EINTR read(3) sometimes errors with EINTR on macOS over slow connections. 9pfuse(1) now retries read(3) instead of sysfatal(3)ing. --- src/cmd/9pfuse/fuse.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/cmd/9pfuse') diff --git a/src/cmd/9pfuse/fuse.c b/src/cmd/9pfuse/fuse.c index 3f91ce78..b84663e9 100644 --- a/src/cmd/9pfuse/fuse.c +++ b/src/cmd/9pfuse/fuse.c @@ -48,7 +48,6 @@ readfusemsg(void) int n, nn; m = allocfusemsg(); - errno = 0; /* * The FUSE kernel device apparently guarantees * that this read will return exactly one message. @@ -57,7 +56,11 @@ readfusemsg(void) * FUSE returns an ENODEV error, not EOF, * when the connection is unmounted. */ - if((n = read(fusefd, m->buf, fusebufsize)) < 0){ + do{ + errno = 0; + n = read(fusefd, m->buf, fusebufsize); + }while(n < 0 && errno == EINTR); + if(n < 0){ if(errno != ENODEV) sysfatal("readfusemsg: %r"); } -- cgit v1.2.3 From a5b24c22a865f2ea3ee389b9d0a235bf7d93f5a6 Mon Sep 17 00:00:00 2001 From: Xiao-Yong Jin Date: Wed, 14 Mar 2018 20:17:10 -0500 Subject: mount, 9pfuse: detect macports installed osxfuse MacPorts installs osxfuse under /opt/local. --- src/cmd/9pfuse/fuse.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/cmd/9pfuse') diff --git a/src/cmd/9pfuse/fuse.c b/src/cmd/9pfuse/fuse.c index b84663e9..66f66065 100644 --- a/src/cmd/9pfuse/fuse.c +++ b/src/cmd/9pfuse/fuse.c @@ -810,6 +810,8 @@ mountfuse(char *mtpt) "/Support/load_osxfusefs"), 0) < 0 && access((v="osxfuse", f="/Library/Filesystems/osxfuse.fs" "/Contents/Resources/load_osxfuse"), 0) < 0 && + access((v="osxfuse", f="/opt/local/Library/Filesystems/osxfuse.fs" + "/Contents/Resources/load_osxfuse"), 0) < 0 && access((v="fusefs", f="/System/Library/Extensions/fusefs.kext" "/Contents/Resources/load_fusefs"), 0) < 0 && access(f="/Library/Extensions/fusefs.kext" @@ -874,6 +876,12 @@ mountfuse(char *mtpt) execl("/Library/Filesystems/osxfuse.fs/Contents/Resources/mount_osxfuse", "mount_osxfuse", buf, mtpt, nil); + /* OSXFUSE >=3.3 from macports */ + putenv("MOUNT_OSXFUSE_DAEMON_PATH", + "/opt/local/Library/Filesystems/osxfuse.fs/Contents/Resources/mount_osxfuse"); + execl("/opt/local/Library/Filesystems/osxfuse.fs/Contents/Resources/mount_osxfuse", + "mount_osxfuse", buf, mtpt, nil); + /* Lion OSXFUSE location */ putenv("MOUNT_FUSEFS_DAEMON_PATH", "/Library/Filesystems/osxfusefs.fs/Support/mount_osxfusefs"); -- cgit v1.2.3