In the master Go library the syscall.Dup2 function was changed to only
return an error, rather than returning both the new file descriptor and
and an error (when there is no error the new file descriptor is always
the second argument anyhow).  This patch makes the same change to
libgo.  Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline.

Ian

diff -r eb004a41aa88 libgo/go/syscall/exec_bsd.go
--- a/libgo/go/syscall/exec_bsd.go	Tue Feb 14 10:00:14 2012 -0800
+++ b/libgo/go/syscall/exec_bsd.go	Tue Feb 14 11:34:01 2012 -0800
@@ -136,9 +136,8 @@
 	// so that pass 2 won't stomp on an fd it needs later.
 	nextfd = int(len(fd))
 	if pipe < nextfd {
-		_, err2 := Dup2(pipe, nextfd)
-		if err2 != nil {
-			err1 = err2.(Errno)
+		err1 = raw_dup2(pipe, nextfd)
+		if err1 != 0 {
 			goto childerror
 		}
 		raw_fcntl(nextfd, F_SETFD, FD_CLOEXEC)
@@ -147,9 +146,8 @@
 	}
 	for i = 0; i < len(fd); i++ {
 		if fd[i] >= 0 && fd[i] < int(i) {
-			_, err2 := Dup2(fd[i], nextfd)
-			if err2 != nil {
-				err1 = err2.(Errno)
+			err1 = raw_dup2(fd[i], nextfd)
+			if err1 != 0 {
 				goto childerror
 			}
 			raw_fcntl(nextfd, F_SETFD, FD_CLOEXEC)
@@ -178,9 +176,8 @@
 		}
 		// The new fd is created NOT close-on-exec,
 		// which is exactly what we want.
-		_, err2 := Dup2(fd[i], i)
+		err1 = raw_dup2(fd[i], i)
 		if err1 != 0 {
-			err1 = err2.(Errno)
 			goto childerror
 		}
 	}
diff -r eb004a41aa88 libgo/go/syscall/exec_linux.go
--- a/libgo/go/syscall/exec_linux.go	Tue Feb 14 10:00:14 2012 -0800
+++ b/libgo/go/syscall/exec_linux.go	Tue Feb 14 11:34:01 2012 -0800
@@ -161,9 +161,8 @@
 	// so that pass 2 won't stomp on an fd it needs later.
 	nextfd = int(len(fd))
 	if pipe < nextfd {
-		_, err2 := Dup2(pipe, nextfd)
-		if err2 != nil {
-			err1 = err2.(Errno)
+		err1 = raw_dup2(pipe, nextfd)
+		if err1 != 0 {
 			goto childerror
 		}
 		raw_fcntl(nextfd, F_SETFD, FD_CLOEXEC)
@@ -172,9 +171,8 @@
 	}
 	for i = 0; i < len(fd); i++ {
 		if fd[i] >= 0 && fd[i] < int(i) {
-			_, err2 := Dup2(fd[i], nextfd)
-			if err2 != nil {
-				err1 = err2.(Errno)
+			err1 = raw_dup2(fd[i], nextfd)
+			if err1 != 0 {
 				goto childerror
 			}
 			raw_fcntl(nextfd, F_SETFD, FD_CLOEXEC)
@@ -203,9 +201,8 @@
 		}
 		// The new fd is created NOT close-on-exec,
 		// which is exactly what we want.
-		_, err2 := Dup2(fd[i], i);
-		if err2 != nil {
-			err1 = err2.(Errno)
+		err1 = raw_dup2(fd[i], i)
+		if err1 != 0 {
 			goto childerror
 		}
 	}
diff -r eb004a41aa88 libgo/go/syscall/exec_unix.go
--- a/libgo/go/syscall/exec_unix.go	Tue Feb 14 10:00:14 2012 -0800
+++ b/libgo/go/syscall/exec_unix.go	Tue Feb 14 11:34:01 2012 -0800
@@ -47,6 +47,9 @@
 //sysnb	raw_exit(status int)
 //_exit(status int)
 
+//sysnb raw_dup2(oldfd int, newfd int) (err Errno)
+//dup2(oldfd int, newfd int) int
+
 // Note: not raw, returns error rather than Errno.
 //sys	read(fd int, p *byte, np int) (n int, err error)
 //read(fd int, buf *byte, count Size_t) Ssize_t
diff -r eb004a41aa88 libgo/go/syscall/libcall_posix.go
--- a/libgo/go/syscall/libcall_posix.go	Tue Feb 14 10:00:14 2012 -0800
+++ b/libgo/go/syscall/libcall_posix.go	Tue Feb 14 11:34:01 2012 -0800
@@ -178,7 +178,7 @@
 //sysnb	Dup(oldfd int) (fd int, err error)
 //dup(oldfd int) int
 
-//sysnb	Dup2(oldfd int, newfd int) (fd int, err error)
+//sysnb	Dup2(oldfd int, newfd int) (err error)
 //dup2(oldfd int, newfd int) int
 
 //sys	Exit(code int)

Reply via email to