Update to more recent GNULIB
[pspp] / src / libpspp / temp-file.c
index 9d3c392659753043667af822b9bbfe7bd3e1b0f0..03e6f18e61229e4717e2881e51d4728f2cc5cf5c 100644 (file)
@@ -40,6 +40,7 @@
 
 */
 
+static void cleanup (void);
 
 static struct temp_dir *temp_dir;
 struct hmapx map;
@@ -51,6 +52,30 @@ setup (void)
   temp_dir = create_temp_dir ("pspp", NULL, true);
 }
 
+static void
+initialise (void)
+{
+  if (temp_dir == NULL)
+    {
+      setup ();
+      if (temp_dir == NULL)
+        return ;
+      atexit (cleanup);
+    }
+}
+
+
+const char *
+temp_dir_name (void)
+{
+  initialise ();
+
+  if (temp_dir)
+    return temp_dir->dir_name;
+
+  return NULL;
+}
+
 static void
 cleanup (void)
 {
@@ -74,17 +99,13 @@ create_temp_file (void)
   char *file_name;
   FILE *stream;
 
+  initialise ();
   if (temp_dir == NULL)
-    {
-      setup ();
-      if (temp_dir == NULL)
-        return NULL;
-      atexit (cleanup);
-    }
+    return NULL;
 
   file_name = xasprintf ("%s/%d", temp_dir->dir_name, idx++);
   register_temp_file (temp_dir, file_name);
-  stream = fopen_temp (file_name, "wb+");
+  stream = fopen_temp (file_name, "wb+", true);
   if (stream == NULL)
     unregister_temp_file (temp_dir, file_name);
   else
@@ -104,7 +125,7 @@ close_temp_file (FILE *file)
       struct hmapx_node *node = hmapx_first_with_hash (&map, hash_pointer (file, 0));
       char *fn = node->data;
       fclose_temp (file);
-      cleanup_temp_file (temp_dir, fn); 
+      cleanup_temp_file (temp_dir, fn);
       hmapx_delete (&map, node);
       free (fn);
     }