9pfuse: osxfuse support

R=rsc
http://codereview.appspot.com/6503093
This commit is contained in:
Russ Cox 2012-09-08 12:49:19 -04:00
parent 1c99633848
commit d905d2f5fe

View file

@ -675,7 +675,7 @@ fusefmt(Fmt *fmt)
break; break;
} }
case FUSE_SETXATTR: { case FUSE_SETXATTR: {
fmtprint(fmt, "(Serxattr)"); fmtprint(fmt, "(Setxattr)");
break; break;
} }
case FUSE_GETXATTR: { case FUSE_GETXATTR: {
@ -798,11 +798,13 @@ mountfuse(char *mtpt)
int i, pid, fd, r; int i, pid, fd, r;
char buf[20]; char buf[20];
struct vfsconf vfs; struct vfsconf vfs;
char *f; char *f, *v;
if(getvfsbyname("fusefs", &vfs) < 0){ if(getvfsbyname(v="osxfusefs", &vfs) < 0 && getvfsbyname(v="fusefs", &vfs) < 0){
if(access(f="/System/Library/Extensions/fusefs.kext" if(access((v="osxfusefs", f="/Library/Filesystems/osxfusefs.fs"
"/Contents/Resources/load_fusefs", 0) < 0 && "/Support/load_osxfusefs"), 0) < 0 &&
access((v="fusefs", f="/System/Library/Extensions/fusefs.kext"
"/Contents/Resources/load_fusefs"), 0) < 0 &&
access(f="/Library/Extensions/fusefs.kext" access(f="/Library/Extensions/fusefs.kext"
"/Contents/Resources/load_fusefs", 0) < 0 && "/Contents/Resources/load_fusefs", 0) < 0 &&
access(f="/Library/Filesystems" access(f="/Library/Filesystems"
@ -820,15 +822,15 @@ mountfuse(char *mtpt)
werrstr("load_fusefs failed: exit %d", r); werrstr("load_fusefs failed: exit %d", r);
return -1; return -1;
} }
if(getvfsbyname("fusefs", &vfs) < 0){ if(getvfsbyname(v, &vfs) < 0){
werrstr("getvfsbyname fusefs: %r"); werrstr("getvfsbyname %s: %r", v);
return -1; return -1;
} }
} }
/* Look for available FUSE device. */ /* Look for available FUSE device. */
for(i=0;; i++){ for(i=0;; i++){
snprint(buf, sizeof buf, "/dev/fuse%d", i); snprint(buf, sizeof buf, "/dev/%.*s%d", strlen(v)-2, v, i);
if(access(buf, 0) < 0){ if(access(buf, 0) < 0){
werrstr("no available fuse devices"); werrstr("no available fuse devices");
return -1; return -1;
@ -848,6 +850,12 @@ mountfuse(char *mtpt)
* mount_fusefs binary in different places. * mount_fusefs binary in different places.
* Try all. * Try all.
*/ */
/* Lion OSXFUSE location */
putenv("MOUNT_FUSEFS_DAEMON_PATH",
"/Library/Filesystems/osxfusefs.fs/Support/mount_osxfusefs");
execl("/Library/Filesystems/osxfusefs.fs/Support/mount_osxfusefs",
"mount_osxfusefs", buf, mtpt, nil);
/* Leopard location */ /* Leopard location */
putenv("MOUNT_FUSEFS_DAEMON_PATH", putenv("MOUNT_FUSEFS_DAEMON_PATH",
"/Library/Filesystems/fusefs.fs/Support/mount_fusefs"); "/Library/Filesystems/fusefs.fs/Support/mount_fusefs");