Explorar el Código

streamline old-kernel fallback path of pipe2 to use syscalls directly

also, don't waste code/time on F_GETFL since pipes always have blank
flags initially (at least on old kernels, which are all this fallback
code matters for).
Rich Felker hace 12 años
padre
commit
89d3df6e54
Se han modificado 1 ficheros con 4 adiciones y 4 borrados
  1. 4 4
      src/unistd/pipe2.c

+ 4 - 4
src/unistd/pipe2.c

@@ -11,12 +11,12 @@ int pipe2(int fd[2], int flag)
 	ret = __syscall(SYS_pipe, fd);
 	if (ret) return __syscall_ret(ret);
 	if (flag & O_CLOEXEC) {
-		fcntl(fd[0], F_SETFD, FD_CLOEXEC);
-		fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+		__syscall(SYS_fcntl, fd[0], F_SETFD, FD_CLOEXEC);
+		__syscall(SYS_fcntl, fd[1], F_SETFD, FD_CLOEXEC);
 	}
 	if (flag & O_NONBLOCK) {
-		fcntl(fd[0], F_SETFL, fcntl(fd[0], F_GETFL) | O_NONBLOCK);
-		fcntl(fd[1], F_SETFL, fcntl(fd[1], F_GETFL) | O_NONBLOCK);
+		__syscall(SYS_fcntl, fd[0], F_SETFL, O_NONBLOCK);
+		__syscall(SYS_fcntl, fd[1], F_SETFL, O_NONBLOCK);
 	}
 	return 0;
 }