Browse Source

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 12 năm trước cách đây
mục cha
commit
89d3df6e54
1 tập tin đã thay đổi với 4 bổ sung4 xóa
  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;
 }