aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-05-08 14:32:58 +0200
committerFlorian Weimer <fweimer@redhat.com>2017-05-08 15:54:10 +0200
commit706256afb6c844a0e6aaab2b60f4326b91aca2e9 (patch)
tree60c57dfaa51a5a7f77bd270c7ce297fc92fac153
parentcd354a38495425bcf106fc410ec5e3c598c1aebe (diff)
downloadglibc-706256afb6c844a0e6aaab2b60f4326b91aca2e9.zip
glibc-706256afb6c844a0e6aaab2b60f4326b91aca2e9.tar.gz
glibc-706256afb6c844a0e6aaab2b60f4326b91aca2e9.tar.bz2
support: Delete temporary files in LIFO order
This is required to remove temporary directories which contain temporary files. Previously, FIFO order meant that directory removal was attempted when the directory still contained files, which meant that temporary directory cleanup was essentially unsupported.
-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 4f09eec..603587b 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 5950aec..50cbae6 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");
}