]> Savannah Git Hosting - gnulib.git/commitdiff
clean-temp: Don't force deletion of temporary files on native Windows.
authorBruno Haible <bruno@clisp.org>
Sat, 27 Jun 2020 22:03:44 +0000 (00:03 +0200)
committerBruno Haible <bruno@clisp.org>
Sat, 27 Jun 2020 22:04:42 +0000 (00:04 +0200)
* lib/clean-temp.h (open_temp, fopen_temp): Add delete_on_close
argument.
* lib/clean-temp.c (open_temp, fopen_temp): Likewise.
* NEWS: Mention the change.
* lib/javacomp.c (write_temp_file): Update.

ChangeLog
NEWS
lib/clean-temp.c
lib/clean-temp.h
lib/javacomp.c

index aefe56392d00eeeae60489699de79f1451933e45..7e046bc402ee5d390ab570c207a4a688e1f9dfcf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2020-06-27  Bruno Haible  <bruno@clisp.org>
+
+       clean-temp: Don't force deletion of temporary files on native Windows.
+       * lib/clean-temp.h (open_temp, fopen_temp): Add delete_on_close
+       argument.
+       * lib/clean-temp.c (open_temp, fopen_temp): Likewise.
+       * NEWS: Mention the change.
+       * lib/javacomp.c (write_temp_file): Update.
+
 2020-06-27  Bruno Haible  <bruno@clisp.org>
 
        fatal-signal: Make multithread-safe.
diff --git a/NEWS b/NEWS
index 5684494c8d20d09ee28143a9ee8d64d2d00f1b46..668f2d60c0eacc37f2a51c01c72b4bd5a50524cf 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -58,6 +58,10 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2020-06-27  clean-temp      The functions open_temp, fopen_temp now take a
+                            'bool delete_on_close' argument. If in doubt, pass
+                            false.
+
 2020-06-27  tempname        The link requirements of these modules are changed
             mkdtemp         from empty to $(LIB_GETRANDOM).
             mkstemp
index c57d6581715f0170f55f6d1c1d49bf0715d6c390..b9badac748da55cf394a6779035bdc720169a263 100644 (file)
@@ -630,7 +630,7 @@ unregister_fd (int fd)
 /* Open a temporary file in a temporary directory.
    Registers the resulting file descriptor to be closed.  */
 int
-open_temp (const char *file_name, int flags, mode_t mode)
+open_temp (const char *file_name, int flags, mode_t mode, bool delete_on_close)
 {
   int fd;
   int saved_errno;
@@ -640,7 +640,7 @@ open_temp (const char *file_name, int flags, mode_t mode)
 #if defined _WIN32 && ! defined __CYGWIN__
   /* Use _O_TEMPORARY when possible, to increase the chances that the
      temporary file is removed when the process crashes.  */
-  if (supports_delete_on_close ())
+  if (delete_on_close && supports_delete_on_close ())
     fd = open (file_name, flags | _O_TEMPORARY, mode);
   else
 #endif
@@ -656,7 +656,7 @@ open_temp (const char *file_name, int flags, mode_t mode)
 /* Open a temporary file in a temporary directory.
    Registers the resulting file descriptor to be closed.  */
 FILE *
-fopen_temp (const char *file_name, const char *mode)
+fopen_temp (const char *file_name, const char *mode, bool delete_on_close)
 {
   FILE *fp;
   int saved_errno;
@@ -666,7 +666,7 @@ fopen_temp (const char *file_name, const char *mode)
 #if defined _WIN32 && ! defined __CYGWIN__
   /* Use _O_TEMPORARY when possible, to increase the chances that the
      temporary file is removed when the process crashes.  */
-  if (supports_delete_on_close ())
+  if (delete_on_close && supports_delete_on_close ())
     {
       size_t mode_len = strlen (mode);
       char *augmented_mode = (char *) xmalloca (mode_len + 2);
index 620bd086c356186aba025a65208a9778a076c56a..5b663286c835226419f820d6e247549d213c246f 100644 (file)
@@ -117,9 +117,13 @@ extern int cleanup_temp_dir_contents (struct temp_dir *dir);
 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);
+   Registers the resulting file descriptor to be closed.
+   DELETE_ON_CLOSE indicates whether the file can be deleted when the resulting
+   file descriptor or stream is closed.  */
+extern int open_temp (const char *file_name, int flags, mode_t mode,
+                      bool delete_on_close);
+extern FILE * fopen_temp (const char *file_name, const char *mode,
+                          bool delete_on_close);
 
 /* Close a temporary file in a temporary directory.
    Unregisters the previously registered file descriptor.  */
index 4717a5fd7d76dadcf1db9935ba04666eb5b6a9e9..63efc2d78283ce48cd9f92868aa8148c8e7f3284 100644 (file)
@@ -573,7 +573,7 @@ write_temp_file (struct temp_dir *tmpdir, const char *file_name,
   FILE *fp;
 
   register_temp_file (tmpdir, file_name);
-  fp = fopen_temp (file_name, "we");
+  fp = fopen_temp (file_name, "we", false);
   if (fp == NULL)
     {
       error (0, errno, _("failed to create \"%s\""), file_name);