Преглед на файлове

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 години
родител
ревизия
89d3df6e54
променени са 1 файла, в които са добавени 4 реда и са изтрити 4 реда
  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;
 }