From c9919744cf99477ff2c8b7db7550797355a1e854 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 23 Feb 2012 09:18:48 -0200 Subject: [PATCH] Updates for weekly-2012.02.22 --- fuse/misc.go | 12 +++++++++++- fuse/misc_test.go | 2 +- fuse/mount.go | 21 ++++++++++----------- fuse/mountstate.go | 2 +- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/fuse/misc.go b/fuse/misc.go index 4d16bde31..6ac58b637 100644 --- a/fuse/misc.go +++ b/fuse/misc.go @@ -32,9 +32,19 @@ func (code Status) Ok() bool { // Convert error back to Errno based errors. func ToStatus(err error) Status { - if err == nil { + switch err { + case nil: return OK + case os.ErrPermission: + return EPERM + case os.ErrExist: + return Status(syscall.EEXIST) + case os.ErrNotExist: + return ENOENT + case os.ErrInvalid: + return EINVAL } + switch t := err.(type) { case syscall.Errno: return Status(t) diff --git a/fuse/misc_test.go b/fuse/misc_test.go index 03f8567f4..6bdb89dc3 100644 --- a/fuse/misc_test.go +++ b/fuse/misc_test.go @@ -8,7 +8,7 @@ import ( ) func TestToStatus(t *testing.T) { - errNo := ToStatus(os.EPERM) + errNo := ToStatus(os.ErrPermission) if errNo != EPERM { t.Errorf("Wrong conversion %v != %v", errNo, syscall.EPERM) } diff --git a/fuse/mount.go b/fuse/mount.go index d91803738..9fbc4a5e6 100644 --- a/fuse/mount.go +++ b/fuse/mount.go @@ -47,11 +47,9 @@ func mount(mountPoint string, options string) (f *os.File, finalMountPoint strin cmd := []string{fusermountBinary, mountPoint} if options != "" { - log.Printf("o %q", options) cmd = append(cmd, "-o") cmd = append(cmd, options) } - proc, err := os.StartProcess(fusermountBinary, cmd, &os.ProcAttr{ @@ -61,12 +59,13 @@ func mount(mountPoint string, options string) (f *os.File, finalMountPoint strin if err != nil { return } - w, err := os.Wait(proc.Pid, 0) + + w, err := proc.Wait() if err != nil { return } - if w.ExitStatus() != 0 { - err = fmt.Errorf("fusermount exited with code %d\n", w.ExitStatus()) + if !w.Success() { + err = fmt.Errorf("fusermount exited with code %v\n", w.Sys()) return } @@ -83,9 +82,9 @@ func privilegedUnmount(mountPoint string) error { if err != nil { return err } - w, err := os.Wait(proc.Pid, 0) - if w.ExitStatus() != 0 { - return fmt.Errorf("umount exited with code %d\n", w.ExitStatus()) + w, err := proc.Wait() + if !w.Success() { + return fmt.Errorf("umount exited with code %v\n", w.Sys()) } return err } @@ -101,12 +100,12 @@ func unmount(mountPoint string) (err error) { if err != nil { return } - w, err := os.Wait(proc.Pid, 0) + w, err := proc.Wait() if err != nil { return } - if w.ExitStatus() != 0 { - return fmt.Errorf("fusermount -u exited with code %d\n", w.ExitStatus()) + if !w.Success() { + return fmt.Errorf("fusermount -u exited with code %v\n", w.Sys()) } return } diff --git a/fuse/mountstate.go b/fuse/mountstate.go index a0e4c0819..49fa48d37 100644 --- a/fuse/mountstate.go +++ b/fuse/mountstate.go @@ -111,6 +111,7 @@ func (me *MountState) Unmount() (err error) { delay = 2*delay + 5*time.Millisecond time.Sleep(delay) } + me.mountPoint = "" return err } @@ -180,7 +181,6 @@ func (me *MountState) Loop() { me.loop() me.mountFile.Close() me.mountFile = nil - me.mountPoint = "" } func (me *MountState) loop() {