diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2005-04-11 20:01:46 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2005-04-11 20:01:46 +0000 |
commit | 74fdf19ae79901a077ae411a66bbdbe693b0c1a6 (patch) | |
tree | 75dd5085eaab9ac1567160a5345d53ba3b36ea7f /lib | |
parent | 10bcc8d795ddfa981e77f7f388d852a3bcd842d2 (diff) | |
download | coreutils-74fdf19ae79901a077ae411a66bbdbe693b0c1a6.tar.xz |
Include unistd-safer.h first, to test interface.
(dup_safer) [!deefined F_DUPD]: Use new fd_safer function instead of
rolling our own code.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dup-safer.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/lib/dup-safer.c b/lib/dup-safer.c index 408a1bda7..10c17fcd9 100644 --- a/lib/dup-safer.c +++ b/lib/dup-safer.c @@ -1,5 +1,5 @@ /* Invoke dup, but avoid some glitches. - Copyright (C) 2001, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ # include <config.h> #endif -#include <errno.h> +#include "unistd-safer.h" #if HAVE_FCNTL_H # include <fcntl.h> @@ -34,8 +34,6 @@ # define STDERR_FILENO 2 #endif -#include <unistd-safer.h> - /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ @@ -45,15 +43,8 @@ dup_safer (int fd) #ifdef F_DUPFD return fcntl (fd, F_DUPFD, STDERR_FILENO + 1); #else - int f = dup (fd); - if (0 <= f && f <= STDERR_FILENO) - { - int f1 = dup_safer (f); - int e = errno; - close (f); - errno = e; - f = f1; - } - return f; + /* fd_safer calls us back, but eventually the recursion unwinds and + does the right thing. */ + return fd_safer (dup (fd)); #endif } |