From e2ce744e73010653108898bfce3e79e5f7fa2649 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 14 Nov 2008 12:55:25 +0000 Subject: [PATCH] delete temp files [r23653] --- TODO | 1 - main.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/TODO b/TODO index ec4e14b..354fb16 100644 --- a/TODO +++ b/TODO @@ -34,4 +34,3 @@ Missing Warnings: main/driver: - delete output file if we had an error -- delete temp files! diff --git a/main.c b/main.c index 9183285..9d60894 100644 --- a/main.c +++ b/main.c @@ -144,11 +144,13 @@ typedef enum filetype_t { } filetype_t; struct file_list_entry_t { - const char *name; /**< filename or NULL for stdin */ - filetype_t type; + const char *name; /**< filename or NULL for stdin */ + filetype_t type; file_list_entry_t *next; }; +static file_list_entry_t *temp_files; + #if defined(_DEBUG) || defined(FIRM_DEBUG) /** * Debug printf implementation. @@ -404,9 +406,34 @@ static FILE *make_temp_file(char *buffer, size_t buflen, const char *prefix) exit(1); } + file_list_entry_t *entry = xmalloc(sizeof(*entry)); + memset(entry, 0, sizeof(*entry)); + + size_t name_len = strlen(buffer) + 1; + char *name = malloc(name_len); + memcpy(name, buffer, name_len); + entry->name = name; + + entry->next = temp_files; + temp_files = entry; + return out; } +static void free_temp_files(void) +{ + file_list_entry_t *entry = temp_files; + file_list_entry_t *next; + for ( ; entry != NULL; entry = next) { + next = entry->next; + + unlink(entry->name); + free((char*) entry->name); + free(entry); + } + temp_files = NULL; +} + /** * Do the necessary lowering for compound parameters. */ @@ -575,6 +602,8 @@ int main(int argc, char **argv) bool construct_dep_target = false; struct obstack file_obst; + atexit(free_temp_files); + /* hack for now... */ if (strstr(argv[0], "pptest") != NULL) { extern int pptest_main(int argc, char **argv); -- 2.20.1