about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--support/temp_file.c16
2 files changed, 14 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 4f09eeca9f..603587bc80 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2017-05-08  Florian Weimer  <fweimer@redhat.com>
 
+	Delete temporary files in LIFO order.
+	* support/temp_file.c (struct temp_name_list): Replace q member
+	with next.
+	(add_temp_file): Add new file to front of linked list.
+	(support_delete_temp_files): Use next member.
+	(support_print_temp_files): Likewise.
+
+2017-05-08  Florian Weimer  <fweimer@redhat.com>
+
 	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Remove
 	sys/ultrasound.h.
 	* sysdeps/unix/sysv/linux/sys/ultrasound.h: Remove file.
diff --git a/support/temp_file.c b/support/temp_file.c
index 5950aec06b..50cbae606b 100644
--- a/support/temp_file.c
+++ b/support/temp_file.c
@@ -25,7 +25,6 @@
 #include <support/support.h>
 
 #include <paths.h>
-#include <search.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -33,7 +32,7 @@
 /* List of temporary files.  */
 static struct temp_name_list
 {
-  struct qelem q;
+  struct temp_name_list *next;
   char *name;
 } *temp_name_list;
 
@@ -50,10 +49,8 @@ add_temp_file (const char *name)
   if (newname != NULL)
     {
       newp->name = newname;
-      if (temp_name_list == NULL)
-	temp_name_list = (struct temp_name_list *) &newp->q;
-      else
-	insque (newp, temp_name_list);
+      newp->next = temp_name_list;
+      temp_name_list = newp;
     }
   else
     free (newp);
@@ -105,8 +102,7 @@ support_delete_temp_files (void)
       (void) remove (temp_name_list->name);
       free (temp_name_list->name);
 
-      struct temp_name_list *next
-	= (struct temp_name_list *) temp_name_list->q.q_forw;
+      struct temp_name_list *next = temp_name_list->next;
       free (temp_name_list);
       temp_name_list = next;
     }
@@ -119,9 +115,7 @@ support_print_temp_files (FILE *f)
     {
       struct temp_name_list *n;
       fprintf (f, "temp_files=(\n");
-      for (n = temp_name_list;
-           n != NULL;
-           n = (struct temp_name_list *) n->q.q_forw)
+      for (n = temp_name_list; n != NULL; n = n->next)
         fprintf (f, "  '%s'\n", n->name);
       fprintf (f, ")\n");
     }