]> Cypherpunks repositories - gostls13.git/commitdiff
nacl: fix zero-length writes
authorRuss Cox <rsc@golang.org>
Mon, 20 Sep 2010 02:52:30 +0000 (22:52 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 20 Sep 2010 02:52:30 +0000 (22:52 -0400)
NaCl rejects zero-length write using nil pointer.

R=r
CC=golang-dev
https://golang.org/cl/2237042

src/pkg/syscall/syscall_nacl.go
src/pkg/syscall/zsyscall_nacl_386.go

index b7a6508fb982d43d11ff5b5ab20ca81263c8a3a9..1eca1a328d262dbb878201115b5030b5f684132f 100644 (file)
@@ -8,6 +8,8 @@ package syscall
 
 const OS = "nacl"
 
+var _zero [1]byte // pointer used for zero-length writes
+
 // Auto-generated
 
 //sys  Chmod(path string, mode uint32) (errno int)
index 17b4919fe533af1954af699e2da835329abd27a3..4fa04599a85cd41c8e960aa55b4e56ade9eb6a74 100644 (file)
@@ -1,4 +1,4 @@
-// mksyscall.sh -l32 syscall_nacl.go syscall_nacl_386.go
+// mksyscall.sh -l32 -nacl syscall_nacl.go syscall_nacl_386.go
 // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
 
 package syscall
@@ -35,11 +35,13 @@ func Fstat(fd int, stat *Stat_t) (errno int) {
 }
 
 func Getdents(fd int, buf []byte) (n int, errno int) {
-       var _p0 *byte
+       var _p0 unsafe.Pointer
        if len(buf) > 0 {
-               _p0 = &buf[0]
+               _p0 = unsafe.Pointer(&buf[0])
+       } else {
+               _p0 = unsafe.Pointer(&_zero[0])
        }
-       r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)))
+       r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
        n = int(r0)
        errno = int(e1)
        return
@@ -65,11 +67,13 @@ func Open(path string, mode int, perm uint32) (fd int, errno int) {
 }
 
 func Read(fd int, p []byte) (n int, errno int) {
-       var _p0 *byte
+       var _p0 unsafe.Pointer
        if len(p) > 0 {
-               _p0 = &p[0]
+               _p0 = unsafe.Pointer(&p[0])
+       } else {
+               _p0 = unsafe.Pointer(&_zero[0])
        }
-       r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)))
+       r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
        n = int(r0)
        errno = int(e1)
        return
@@ -89,11 +93,13 @@ func Stat(path string, stat *Stat_t) (errno int) {
 }
 
 func Write(fd int, p []byte) (n int, errno int) {
-       var _p0 *byte
+       var _p0 unsafe.Pointer
        if len(p) > 0 {
-               _p0 = &p[0]
+               _p0 = unsafe.Pointer(&p[0])
+       } else {
+               _p0 = unsafe.Pointer(&_zero[0])
        }
-       r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)))
+       r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
        n = int(r0)
        errno = int(e1)
        return