From 74fdf19ae79901a077ae411a66bbdbe693b0c1a6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 11 Apr 2005 20:01:46 +0000 Subject: Include unistd-safer.h first, to test interface. (dup_safer) [!deefined F_DUPD]: Use new fd_safer function instead of rolling our own code. --- lib/dup-safer.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'lib') 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 #endif -#include +#include "unistd-safer.h" #if HAVE_FCNTL_H # include @@ -34,8 +34,6 @@ # define STDERR_FILENO 2 #endif -#include - /* 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 } -- cgit v1.2.3-70-g09d2