From: Jim Meyering Date: Tue, 24 May 2011 11:44:41 +0000 (+0200) Subject: opendir-safer.c: don't clobber errno; don't close negative FD X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d94bbd1eb1fc483d72397ec5dd94f7e885e12440;p=pspp opendir-safer.c: don't clobber errno; don't close negative FD * lib/opendir-safer.c (opendir_safer): [HAVE_FDOPENDIR || GNULIB_FDOPENDIR]: Don't close a negative file descriptor, and more importantly, don't clobber the offending errno value with EINVAL. Before, upon failure of dup_safer, we would pass the negative file descriptor to fdopendir, which would clobber errno. --- diff --git a/ChangeLog b/ChangeLog index 1ab8584d5c..b7be3f368e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2011-05-24 Jim Meyering + + opendir-safer.c: don't clobber errno; don't close negative FD + * lib/opendir-safer.c (opendir_safer): + [HAVE_FDOPENDIR || GNULIB_FDOPENDIR]: Don't close a negative + file descriptor, and more importantly, don't clobber the + offending errno value with EINVAL. Before, upon failure + of dup_safer, we would pass the negative file descriptor to + fdopendir, which would clobber errno. + 2011-05-23 Bruno Haible idcache: Fix module description. diff --git a/lib/opendir-safer.c b/lib/opendir-safer.c index f1e5fb7aa8..3726f88b13 100644 --- a/lib/opendir-safer.c +++ b/lib/opendir-safer.c @@ -50,10 +50,18 @@ opendir_safer (char const *name) int e; #if HAVE_FDOPENDIR || GNULIB_FDOPENDIR int f = dup_safer (fd); - newdp = fdopendir (f); - e = errno; - if (! newdp) - close (f); + if (f < 0) + { + e = errno; + newdp = NULL; + } + else + { + newdp = fdopendir (f); + e = errno; + if (! newdp) + close (f); + } #else /* !FDOPENDIR */ newdp = opendir_safer (name); e = errno;