|
|
|
@ -37,16 +37,29 @@ type osxfuseInstallation struct { |
|
|
|
|
// Environment variable used to pass the path to the executable calling the
|
|
|
|
|
// mount helper.
|
|
|
|
|
DaemonVar string |
|
|
|
|
|
|
|
|
|
// Environment variable used to pass the "called by library" flag.
|
|
|
|
|
LibVar string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
osxfuseInstallations = []osxfuseInstallation{ |
|
|
|
|
// v4
|
|
|
|
|
{ |
|
|
|
|
DevicePrefix: "/dev/macfuse", |
|
|
|
|
Load: "/Library/Filesystems/macfuse.fs/Contents/Resources/load_macfuse", |
|
|
|
|
Mount: "/Library/Filesystems/macfuse.fs/Contents/Resources/mount_macfuse", |
|
|
|
|
DaemonVar: "_FUSE_DAEMON_PATH", |
|
|
|
|
LibVar: "_FUSE_CALL_BY_LIB", |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// v3
|
|
|
|
|
{ |
|
|
|
|
DevicePrefix: "/dev/osxfuse", |
|
|
|
|
Load: "/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse", |
|
|
|
|
Mount: "/Library/Filesystems/osxfuse.fs/Contents/Resources/mount_osxfuse", |
|
|
|
|
DaemonVar: "MOUNT_OSXFUSE_DAEMON_PATH", |
|
|
|
|
LibVar: "MOUNT_OSXFUSE_CALL_BY_LIB", |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// v2
|
|
|
|
@ -55,6 +68,7 @@ var ( |
|
|
|
|
Load: "/Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs", |
|
|
|
|
Mount: "/Library/Filesystems/osxfusefs.fs/Support/mount_osxfusefs", |
|
|
|
|
DaemonVar: "MOUNT_FUSEFS_DAEMON_PATH", |
|
|
|
|
LibVar: "MOUNT_FUSEFS_CALL_BY_LIB", |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
@ -95,6 +109,7 @@ func openOSXFUSEDev(devPrefix string) (dev *os.File, err error) { |
|
|
|
|
func callMount( |
|
|
|
|
bin string, |
|
|
|
|
daemonVar string, |
|
|
|
|
libVar string, |
|
|
|
|
dir string, |
|
|
|
|
cfg *MountConfig, |
|
|
|
|
dev *os.File, |
|
|
|
@ -127,10 +142,7 @@ func callMount( |
|
|
|
|
) |
|
|
|
|
cmd.ExtraFiles = []*os.File{dev} |
|
|
|
|
cmd.Env = os.Environ() |
|
|
|
|
// OSXFUSE <3.3.0
|
|
|
|
|
cmd.Env = append(cmd.Env, "MOUNT_FUSEFS_CALL_BY_LIB=") |
|
|
|
|
// OSXFUSE >=3.3.0
|
|
|
|
|
cmd.Env = append(cmd.Env, "MOUNT_OSXFUSE_CALL_BY_LIB=") |
|
|
|
|
cmd.Env = append(cmd.Env, libVar+"=") |
|
|
|
|
|
|
|
|
|
daemon := os.Args[0] |
|
|
|
|
if daemonVar != "" { |
|
|
|
@ -197,7 +209,7 @@ func mount( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Call the mount binary with the device.
|
|
|
|
|
if err := callMount(loc.Mount, loc.DaemonVar, dir, cfg, dev, ready); err != nil { |
|
|
|
|
if err := callMount(loc.Mount, loc.DaemonVar, loc.LibVar, dir, cfg, dev, ready); err != nil { |
|
|
|
|
dev.Close() |
|
|
|
|
return nil, fmt.Errorf("callMount: %v", err) |
|
|
|
|
} |
|
|
|
|