From: Eric Blake Date: Fri, 6 Oct 2006 23:13:53 +0000 (+0000) Subject: * clean-temp.h (close_stream_temp): New declaration. X-Git-Tag: cvs-readonly~1776 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=1e875448fb068c888a8c7cb8108369ac365bcf63;p=gnulib.git * clean-temp.h (close_stream_temp): New declaration. * clean-temp.c (includes): Pull in headers according to what other modules are in use. (close_stream_temp) [GNULIB_CLOSE_STREAM]: New function. --- diff --git a/lib/ChangeLog b/lib/ChangeLog index b947fe9ad..9a955ad34 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2006-10-06 Eric Blake + + * clean-temp.h (close_stream_temp): New declaration. + * clean-temp.c (includes): Pull in headers according to what + other modules are in use. + (close_stream_temp) [GNULIB_CLOSE_STREAM]: New function. + 2006-10-06 Bruno Haible * clean-temp.h (cleanup_temp_file, cleanup_temp_subdir, diff --git a/lib/clean-temp.c b/lib/clean-temp.c index 29a27ba21..7347aaf8e 100644 --- a/lib/clean-temp.c +++ b/lib/clean-temp.c @@ -23,6 +23,7 @@ #include "clean-temp.h" #include +#include #include #include #include @@ -38,6 +39,15 @@ #include "xallocsa.h" #include "gl_linkedhash_list.h" #include "gettext.h" +#if GNULIB_CLOSE_STREAM +# include "close-stream.h" +#endif +#if GNULIB_FCNTL_SAFER +# include "fcntl--.h" +#endif +#if GNULIB_FOPEN_SAFER +# include "stdio--.h" +#endif #define _(str) gettext (str) @@ -679,3 +689,25 @@ fwriteerror_temp (FILE *fp) return result; } #endif + +#if GNULIB_CLOSE_STREAM +/* Like close_stream. + Unregisters the previously registered file descriptor. */ +int +close_stream_temp (FILE *fp) +{ + int fd = fileno (fp); + /* No blocking of signals is needed here, since a double close of a + file descriptor is harmless. */ + int result = close_stream (fp); + int saved_errno = errno; + + /* No race condition here: we assume a single-threaded program, hence + fd cannot be re-opened here. */ + + unregister_fd (fd); + + errno = saved_errno; + return result; +} +#endif diff --git a/lib/clean-temp.h b/lib/clean-temp.h index 25030080e..7edb94484 100644 --- a/lib/clean-temp.h +++ b/lib/clean-temp.h @@ -122,6 +122,10 @@ extern int fclose_temp (FILE *fp); Unregisters the previously registered file descriptor. */ extern int fwriteerror_temp (FILE *fp); +/* Like close_stream. + Unregisters the previously registered file descriptor. */ +extern int close_stream_temp (FILE *fp); + #ifdef __cplusplus }