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