X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Ftemp-file.c;h=d121cb9e2e5fc42466aeb0f68fd42bdb5f9daf61;hb=18f9e37c8bc5f8ea21c9f3b3b6b3d0dee0b572cb;hp=0391ec9c01f91ff1f3384e293c2d9b41102dabc0;hpb=228b83840e3f053aecfa9feac395fb6855adf044;p=pspp diff --git a/src/libpspp/temp-file.c b/src/libpspp/temp-file.c index 0391ec9c01..d121cb9e2e 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,11 +52,35 @@ 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) { struct hmapx_node *node; - const char *fn; + char *fn; cleanup_temp_dir (temp_dir); @@ -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);