This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] support: Delete temporary files in LIFO order
- From: fweimer at redhat dot com (Florian Weimer)
- To: libc-alpha at sourceware dot org
- Date: Mon, 08 May 2017 14:49:50 +0200
- Subject: [PATCH] support: Delete temporary files in LIFO order
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=fweimer at redhat dot com
- Dkim-filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 35BD74ACB6
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 35BD74ACB6
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.
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.
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");
}