]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: fix error return bug for 64-bit return on 32-bit platform
authorChristopher Wedgwood <cw@f00f.org>
Sun, 13 Dec 2009 21:05:49 +0000 (13:05 -0800)
committerRuss Cox <rsc@golang.org>
Sun, 13 Dec 2009 21:05:49 +0000 (13:05 -0800)
R=dho, rsc
CC=r
https://golang.org/cl/176058

src/pkg/syscall/mksyscall.sh
src/pkg/syscall/zsyscall_darwin_386.go
src/pkg/syscall/zsyscall_freebsd_386.go
src/pkg/syscall/zsyscall_linux_386.go
src/pkg/syscall/zsyscall_linux_arm.go

index 07a8783ff52e51c3c83b595e41c7229d705a7074..2158825520bedc3e1b203858c89c3a9e0932b5aa 100755 (executable)
@@ -158,7 +158,6 @@ while(<>) {
                        }
                        $ret[$i] = sprintf("r%d", $i);
                        $ret[$i+1] = sprintf("r%d", $i+1);
-                       $i++;           # loop will do another $i++
                }
                $body .= "\t$name = $type($reg);\n";
        }
index 21322f62ba2e623f0a0ed39dc92bfeee138c7787..f4c33edc96f32e5c56b234990e5ef6d67c89cf35 100644 (file)
@@ -502,8 +502,9 @@ func Rmdir(path string) (errno int) {
 }
 
 func Seek(fd int, offset int64, whence int) (newoffset int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0);
+       r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0);
        newoffset = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
index 5ce8c813008341dec9b0b6fa1dde1932682ad2a9..055d12775ee7fa380aeeb32aa9851395da66f7ec 100644 (file)
@@ -502,8 +502,9 @@ func Rmdir(path string) (errno int) {
 }
 
 func Seek(fd int, offset int64, whence int) (newoffset int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0);
+       r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0);
        newoffset = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
index 26b07618bcc8b55b6d658f6922b36c51cd783b5c..e7019b63e7845613d85f38974a4a48892571a34a 100644 (file)
@@ -453,8 +453,9 @@ func Setuid(uid int) (errno int) {
 }
 
 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags));
+       r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags));
        n = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
@@ -476,8 +477,9 @@ func Sysinfo(info *Sysinfo_t) (errno int) {
 }
 
 func Tee(rfd int, wfd int, len int, flags int) (n int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0);
+       r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0);
        n = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
index f8cd8a70a37f490d068062831c4aba55d53a111d..c221d3c48deb1e2f7350bd1d257c22edf16dce9e 100644 (file)
@@ -453,8 +453,9 @@ func Setuid(uid int) (errno int) {
 }
 
 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags));
+       r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags));
        n = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
@@ -476,8 +477,9 @@ func Sysinfo(info *Sysinfo_t) (errno int) {
 }
 
 func Tee(rfd int, wfd int, len int, flags int) (n int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0);
+       r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0);
        n = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
@@ -637,6 +639,27 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) {
        return;
 }
 
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, errno int) {
+       var _p0 *byte;
+       if len(p) > 0 {
+               _p0 = &p[0]
+       }
+       r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)));
+       n = int(r0);
+       errno = int(e1);
+       return;
+}
+
+func sendto(s int, buf []byte, flags int, to uintptr, addrlen _Socklen) (errno int) {
+       var _p0 *byte;
+       if len(buf) > 0 {
+               _p0 = &buf[0]
+       }
+       _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen));
+       errno = int(e1);
+       return;
+}
+
 func Chown(path string, uid int, gid int) (errno int) {
        _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
        errno = int(e1);
@@ -704,8 +727,9 @@ func Lstat(path string, stat *Stat_t) (errno int) {
 }
 
 func Seek(fd int, offset int64, whence int) (off int64, errno int) {
-       r0, r1, _ := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0);
+       r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0);
        off = int64(int64(r1)<<32 | int64(r0));
+       errno = int(e1);
        return;
 }
 
@@ -775,24 +799,3 @@ func Statfs(path string, buf *Statfs_t) (errno int) {
        errno = int(e1);
        return;
 }
-
-func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, errno int) {
-       var _p0 *byte;
-       if len(p) > 0 {
-               _p0 = &p[0]
-       }
-       r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)));
-       n = int(r0);
-       errno = int(e1);
-       return;
-}
-
-func sendto(s int, buf []byte, flags int, to uintptr, addrlen _Socklen) (errno int) {
-       var _p0 *byte;
-       if len(buf) > 0 {
-               _p0 = &buf[0]
-       }
-       _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen));
-       errno = int(e1);
-       return;
-}