]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
curl/main_checkfds: check the fcntl return code better
authorDaniel Stenberg <daniel@haxx.se>
Wed, 12 Oct 2022 09:49:44 +0000 (11:49 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 12 Oct 2022 21:51:15 +0000 (23:51 +0200)
fcntl() can (in theory) return a non-zero number for success, so a
better test for error is checking for -1 explicitly.

Follow-up to 41e1b30ea1b77e9ff

Mentioned-by: Dominik Klemba
Closes #9708

src/tool_main.c

index 9fe6cf9691cafeef8795ef589ba9ff5e5c321a5a..434979dea3de5767f5927de7a3c77331b73bd6d6 100644 (file)
@@ -90,13 +90,17 @@ int _CRT_glob = 0;
  * open before starting to run.  Otherwise, the first three network
  * sockets opened by curl could be used for input sources, downloaded data
  * or error logs as they will effectively be stdin, stdout and/or stderr.
+ *
+ * fcntl's F_GETFD instruction returns -1 if the file descriptor is closed,
+ * otherwise it returns "the file descriptor flags (which typically can only
+ * be FD_CLOEXEC, which is not set here).
  */
 static int main_checkfds(void)
 {
   int fd[2];
-  while(fcntl(STDIN_FILENO, F_GETFD) ||
-        fcntl(STDOUT_FILENO, F_GETFD) ||
-        fcntl(STDERR_FILENO, F_GETFD))
+  while((fcntl(STDIN_FILENO, F_GETFD) == -1) ||
+        (fcntl(STDOUT_FILENO, F_GETFD) == -1) ||
+        (fcntl(STDERR_FILENO, F_GETFD) == -1))
     if(pipe(fd))
       return 1;
   return 0;