From aab0374f6c741a52c9568f9b4106612293bfc6d6 Mon Sep 17 00:00:00 2001 From: Ivan Krasin <imkrasin@gmail.com> Date: Wed, 11 Aug 2010 17:21:51 +0000 Subject: [PATCH] Test PASS. Had to copy syscall structures to fuse.go --- fuse/fuse.go | 35 +++++++++++++++++++++++++---------- fuse/fuse_test.go | 4 ++-- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/fuse/fuse.go b/fuse/fuse.go index 3c781a3..057e16e 100644 --- a/fuse/fuse.go +++ b/fuse/fuse.go @@ -70,7 +70,7 @@ func (m *MountPoint) Unmount() (err os.Error) { return nil } pid, err := os.ForkExec("/bin/fusermount", - []string { "/bin/fusermount", "-u", "m", m.mountPoint }, + []string { "/bin/fusermount", "-u", m.mountPoint }, nil, "", []*os.File { nil, nil, os.Stderr }) @@ -88,14 +88,29 @@ func (m *MountPoint) Unmount() (err os.Error) { return } -func recvmsg(fd int, msg *syscall.Msghdr, flags int) (n int, errno int) { +func recvmsg(fd int, msg *msghdr, flags int) (n int, errno int) { n1, _, e1 := syscall.Syscall(syscall.SYS_RECVMSG, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(n1) errno = int(e1) return } -func Recvmsg(fd int, msg *syscall.Msghdr, flags int) (n int, err os.Error) { +type msghdr struct { + Name uintptr + Namelen uintptr + Iov uintptr + Iovlen uintptr + Control uintptr + Controllen uintptr + Flags uintptr +} + +type iovec struct { + Base uintptr + Len uintptr +} + +func Recvmsg(fd int, msg *msghdr, flags int) (n int, err os.Error) { fmt.Printf("Recvmsg, 0\n") n, errno := recvmsg(fd, msg, flags) fmt.Printf("Recvmsg, 10\n") @@ -106,17 +121,17 @@ func Recvmsg(fd int, msg *syscall.Msghdr, flags int) (n int, err os.Error) { } func getFuseConn(local net.Conn) (f * os.File, err os.Error) { - var msg syscall.Msghdr - var iov syscall.Iovec + var msg msghdr + var iov iovec base := make([]int32, 256) control := make([]int32, 256) - iov.Base = (*byte)(unsafe.Pointer(&base)) - iov.Len = uint64(len(base) * 4) - msg.Iov = &iov + iov.Base = uintptr(unsafe.Pointer(&base[0])) + iov.Len = uintptr(len(base) * 4) + msg.Iov = uintptr(unsafe.Pointer(&iov)) msg.Iovlen = 1 - msg.Control = (*byte)(unsafe.Pointer(&control)) - msg.Controllen = uint64(len(control) * 4) + msg.Control = uintptr(unsafe.Pointer(&control[0])) + msg.Controllen = uintptr(len(control) * 4) _, err = Recvmsg(local.File().Fd(), &msg, 0) fmt.Printf("getFuseConn: 100\n") diff --git a/fuse/fuse_test.go b/fuse/fuse_test.go index f4503d2..5b602b6 100644 --- a/fuse/fuse_test.go +++ b/fuse/fuse_test.go @@ -20,11 +20,11 @@ func TestMount(t *testing.T) { defer os.Remove(tempMountDir) m, err := Mount(tempMountDir, fs) if err != nil { - t.Fatal("Can't mount a dir, err: %v", err) + t.Fatalf("Can't mount a dir, err: %v", err) } err = m.Unmount() if err != nil { - t.Fatal("Can't unmount a dir, err: %v", err) + t.Fatalf("Can't unmount a dir, err: %v", err) } } -- 2.30.9