curl/main_checkfds: check the fcntl return code better

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 41e1b30ea1

Mentioned-by: Dominik Klemba

Closes #9708
This commit is contained in:
Daniel Stenberg 2022-10-12 11:49:44 +02:00
parent 0df0aa74be
commit 0bb2f64905
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View 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;