X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Ftemp-file.c;h=839b99e7572bb18a1cf634a4b54da0925155ee65;hb=d97c0f1ed2858c48173c023964cec8234b5bc831;hp=9d3c392659753043667af822b9bbfe7bd3e1b0f0;hpb=a70c4580757c19cd5054a470c2c5d497a1e71b4c;p=pspp diff --git a/src/libpspp/temp-file.c b/src/libpspp/temp-file.c index 9d3c392659..839b99e757 100644 --- a/src/libpspp/temp-file.c +++ b/src/libpspp/temp-file.c @@ -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,13 +99,9 @@ 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); @@ -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); }