+2006-10-06 Eric Blake <ebb9@byu.net>
+
+ * 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 <bruno@clisp.org>
* clean-temp.h (cleanup_temp_file, cleanup_temp_subdir,
#include "clean-temp.h"
#include <errno.h>
+#include <fcntl.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
#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)
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
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
}