Gave openOSXFUSEDev a makeover.

geesefs-0-30-9
Aaron Jacobs 2015-07-24 15:48:17 +10:00
parent 1bb0fd4724
commit eda994c2e6
1 changed files with 12 additions and 14 deletions

View File

@ -24,31 +24,29 @@ func loadOSXFUSE() error {
return err return err
} }
func openOSXFUSEDev() (*os.File, error) { func openOSXFUSEDev() (dev *os.File, err error) {
var f *os.File // Try each device name.
var err error
for i := uint64(0); ; i++ { for i := uint64(0); ; i++ {
path := "/dev/osxfuse" + strconv.FormatUint(i, 10) path := fmt.Sprintf("/dev/osxfuse%d", i)
f, err = os.OpenFile(path, os.O_RDWR, 0000) dev, err = os.OpenFile(path, os.O_RDWR, 0000)
if os.IsNotExist(err) { if os.IsNotExist(err) {
if i == 0 { if i == 0 {
// not even the first device was found -> fuse is not loaded // Not even the first device was found. Fuse must not be loaded.
return nil, errNotLoaded err = errNotLoaded
return
} }
// we've run out of kernel-provided devices // Otherwise we've run out of kernel-provided devices
return nil, errNoAvail err = errNoAvail
return
} }
if err2, ok := err.(*os.PathError); ok && err2.Err == syscall.EBUSY { if err2, ok := err.(*os.PathError); ok && err2.Err == syscall.EBUSY {
// try the next one // This device is in use; try the next one.
continue continue
} }
if err != nil { return
return nil, err
}
return f, nil
} }
} }