Gave mount a makeover.

geesefs-0-30-9
Aaron Jacobs 2015-07-24 15:45:16 +10:00
parent 695b70b1e6
commit 56758cb302
1 changed files with 30 additions and 11 deletions

View File

@ -1,4 +1,4 @@
package fuseshim package fuse
import ( import (
"bytes" "bytes"
@ -109,23 +109,42 @@ func callMount(dir string, conf *mountConfig, f *os.File, ready chan<- struct{},
return err return err
} }
func mount(dir string, conf *mountConfig, ready chan<- struct{}, errp *error) (*os.File, error) { // Begin the process of mounting at the given directory, returning a connection
f, err := openOSXFUSEDev() // to the kernel. Mounting continues in the background, and is complete when an
// error is written to the supplied channel. The file system may need to
// service the connection in order for mounting to complete.
func mount(
dir string,
conf *mountConfig,
ready chan<- error) (dev *os.File, err error) {
// Open the device.
dev, err = openOSXFUSEDev()
// Special case: we may need to explicitly load osxfuse. Load it, then try
// again.
if err == errNotLoaded { if err == errNotLoaded {
err = loadOSXFUSE() err = loadOSXFUSE()
if err != nil { if err != nil {
return nil, err err = fmt.Errorf("loadOSXFUSE: %v", err)
return
} }
// try again
f, err = openOSXFUSEDev() dev, err = openOSXFUSEDev()
} }
// Propagate errors.
if err != nil { if err != nil {
return nil, err err = fmt.Errorf("openOSXFUSEDev: %v", err)
return
} }
err = callMount(dir, conf, f, ready, errp)
// Call the mount binary with the device.
err = callMount(dir, conf, dev, ready)
if err != nil { if err != nil {
f.Close() dev.Close()
return nil, err err = fmt.Errorf("callMount: %v", err)
return
} }
return f, nil
return
} }