it9pfuse: support MacFUSE >=4 - plan9port - [fork] Plan 9 from user space Err mx1.adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/plan9port URL:git://src.adamsgaard.dk/plan9port mx1.adamsgaard.dk 70 1Log /src/plan9port/log.gph mx1.adamsgaard.dk 70 1Files /src/plan9port/files.gph mx1.adamsgaard.dk 70 1Refs /src/plan9port/refs.gph mx1.adamsgaard.dk 70 1README /src/plan9port/file/README.md.gph mx1.adamsgaard.dk 70 1LICENSE /src/plan9port/file/LICENSE.gph mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1commit f62d4c4143c9a21e488fca658590e1546700586f /src/plan9port/commit/f62d4c4143c9a21e488fca658590e1546700586f.gph mx1.adamsgaard.dk 70 1parent a72478870ae66b7ac1e73b1d22b578cd31852f33 /src/plan9port/commit/a72478870ae66b7ac1e73b1d22b578cd31852f33.gph mx1.adamsgaard.dk 70 hAuthor: Connor Taffe URL:mailto:connor.taffe@liveramp.com mx1.adamsgaard.dk 70 iDate: Tue, 26 Jan 2021 15:14:18 -0600 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i9pfuse: support MacFUSE >=4 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iMacFUSE 4 removes support for passing device fd to the mount command. Adds Err mx1.adamsgaard.dk 70 isupport for the receiving the fd over a socket instead, and updates command paths Err mx1.adamsgaard.dk 70 iand filesystem name. Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i M src/cmd/9pfuse/fuse.c | 31 ++++++++++++++++++++++++++++++- Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i1 file changed, 30 insertions(+), 1 deletion(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/src/cmd/9pfuse/fuse.c b/src/cmd/9pfuse/fuse.c /src/plan9port/file/src/cmd/9pfuse/fuse.c.gph mx1.adamsgaard.dk 70 it@@ -798,16 +798,19 @@ mountfuse(char *mtpt) Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i return fd; Err mx1.adamsgaard.dk 70 i #elif defined(__APPLE__) Err mx1.adamsgaard.dk 70 i- int i, pid, fd, r; Err mx1.adamsgaard.dk 70 i+ int i, pid, fd, r, p[2]; Err mx1.adamsgaard.dk 70 i char buf[20]; Err mx1.adamsgaard.dk 70 i struct vfsconf vfs; Err mx1.adamsgaard.dk 70 i char *f, *v; Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i if(getvfsbyname(v="osxfusefs", &vfs) < 0 && Err mx1.adamsgaard.dk 70 i+ getvfsbyname(v="macfuse", &vfs) < 0 && Err mx1.adamsgaard.dk 70 i getvfsbyname(v="osxfuse", &vfs) < 0 && Err mx1.adamsgaard.dk 70 i getvfsbyname(v="fusefs", &vfs) < 0){ Err mx1.adamsgaard.dk 70 i if(access((v="osxfusefs", f="/Library/Filesystems/osxfusefs.fs" Err mx1.adamsgaard.dk 70 i "/Support/load_osxfusefs"), 0) < 0 && Err mx1.adamsgaard.dk 70 i+ access((v="macfuse", f="/Library/Filesystems/macfuse.fs" Err mx1.adamsgaard.dk 70 i+ "/Contents/Resources/load_macfuse"), 0) < 0 && Err mx1.adamsgaard.dk 70 i access((v="osxfuse", f="/Library/Filesystems/osxfuse.fs" Err mx1.adamsgaard.dk 70 i "/Contents/Resources/load_osxfuse"), 0) < 0 && Err mx1.adamsgaard.dk 70 i access((v="osxfuse", f="/opt/local/Library/Filesystems/osxfuse.fs" Err mx1.adamsgaard.dk 70 it@@ -837,6 +840,32 @@ mountfuse(char *mtpt) Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i+ /* MacFUSE >=4 dropped support for passing fd */ Err mx1.adamsgaard.dk 70 i+ if (strcmp(v, "macfuse") == 0) { Err mx1.adamsgaard.dk 70 i+ if(socketpair(AF_UNIX, SOCK_STREAM, 0, p) < 0) Err mx1.adamsgaard.dk 70 i+ return -1; Err mx1.adamsgaard.dk 70 i+ pid = fork(); Err mx1.adamsgaard.dk 70 i+ if(pid < 0) Err mx1.adamsgaard.dk 70 i+ return -1; Err mx1.adamsgaard.dk 70 i+ if(pid == 0){ Err mx1.adamsgaard.dk 70 i+ close(p[1]); Err mx1.adamsgaard.dk 70 i+ snprint(buf, sizeof buf, "%d", p[0]); Err mx1.adamsgaard.dk 70 i+ putenv("_FUSE_COMMFD", buf); Err mx1.adamsgaard.dk 70 i+ putenv("_FUSE_COMMVERS", "2"); Err mx1.adamsgaard.dk 70 i+ putenv("_FUSE_CALL_BY_LIB", "1"); Err mx1.adamsgaard.dk 70 i+ putenv("_FUSE_DAEMON_PATH", Err mx1.adamsgaard.dk 70 i+ "/Library/Filesystems/macfuse.fs/Contents/Resources/mount_macfus"); Err mx1.adamsgaard.dk 70 i+ execl("/Library/Filesystems/macfuse.fs/Contents/Resources/mount_macfuse", Err mx1.adamsgaard.dk 70 i+ "mount_macfuse", mtpt, nil); Err mx1.adamsgaard.dk 70 i+ fprint(2, "exec mount_macfuse: %r\n"); Err mx1.adamsgaard.dk 70 i+ _exit(1); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ close(p[0]); Err mx1.adamsgaard.dk 70 i+ fd = recvfd(p[1]); Err mx1.adamsgaard.dk 70 i+ close(p[1]); Err mx1.adamsgaard.dk 70 i+ return fd; Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i /* Look for available FUSE device. */ Err mx1.adamsgaard.dk 70 i /* Err mx1.adamsgaard.dk 70 i * We need to truncate `fs` from the end of the vfs name if Err mx1.adamsgaard.dk 70 .