Move to here from utf16-ucs4-safe.c.
[gnulib.git] / lib / clean-temp.h
index c564add..6e7c3e6 100644 (file)
@@ -20,6 +20,8 @@
 #define _CLEAN_TEMP_H
 
 #include <stdbool.h>
+#include <stdio.h>
+#include <sys/types.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -32,6 +34,10 @@ extern "C" {
    also - if no signal blocking is used - leaves a time window where a fatal
    signal would not clean up the temporary file.
 
+   Also, open file descriptors need to be closed before the temporary files
+   and the temporary directories can be removed, because only on Unix
+   (excluding Cygwin) can one remove directories containing open files.
+
    This module provides support for temporary directories and temporary files
    inside these temporary directories.  Temporary files without temporary
    directories are not supported here.  */
@@ -83,20 +89,42 @@ extern void register_temp_subdir (struct temp_dir *dir,
 extern void unregister_temp_subdir (struct temp_dir *dir,
                                    const char *absolute_dir_name);
 
-/* Remove the given ABSOLUTE_FILE_NAME and unregister it.  */
-extern void cleanup_temp_file (struct temp_dir *dir,
-                              const char *absolute_file_name);
+/* Remove the given ABSOLUTE_FILE_NAME and unregister it.
+   Return 0 upon success, or -1 if there was some problem.  */
+extern int cleanup_temp_file (struct temp_dir *dir,
+                             const char *absolute_file_name);
 
-/* Remove the given ABSOLUTE_DIR_NAME and unregister it.  */
-extern void cleanup_temp_subdir (struct temp_dir *dir,
-                                const char *absolute_dir_name);
+/* Remove the given ABSOLUTE_DIR_NAME and unregister it.
+   Return 0 upon success, or -1 if there was some problem.  */
+extern int cleanup_temp_subdir (struct temp_dir *dir,
+                               const char *absolute_dir_name);
 
-/* Remove all registered files and subdirectories inside DIR.  */
-extern void cleanup_temp_dir_contents (struct temp_dir *dir);
+/* Remove all registered files and subdirectories inside DIR.
+   Return 0 upon success, or -1 if there was some problem.  */
+extern int cleanup_temp_dir_contents (struct temp_dir *dir);
 
 /* Remove all registered files and subdirectories inside DIR and DIR itself.
-   DIR cannot be used any more after this call.  */
-extern void cleanup_temp_dir (struct temp_dir *dir);
+   DIR cannot be used any more after this call.
+   Return 0 upon success, or -1 if there was some problem.  */
+extern int cleanup_temp_dir (struct temp_dir *dir);
+
+/* Open a temporary file in a temporary directory.
+   Registers the resulting file descriptor to be closed.  */
+extern int open_temp (const char *file_name, int flags, mode_t mode);
+extern FILE * fopen_temp (const char *file_name, const char *mode);
+
+/* Close a temporary file in a temporary directory.
+   Unregisters the previously registered file descriptor.  */
+extern int close_temp (int fd);
+extern int fclose_temp (FILE *fp);
+
+/* Like fwriteerror.
+   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