From 6a0d455dd07be2da7216fd3c459cc98d938619e6 Mon Sep 17 00:00:00 2001 From: jshepher <> Date: Sat, 4 Dec 2004 00:52:04 +0000 Subject: [PATCH] Now calls tmpnam. --- libnix/sources/nix/stdio/tmpfile.c | 53 ++++++++++++++---------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/libnix/sources/nix/stdio/tmpfile.c b/libnix/sources/nix/stdio/tmpfile.c index 6301c37..fc08666 100755 --- a/libnix/sources/nix/stdio/tmpfile.c +++ b/libnix/sources/nix/stdio/tmpfile.c @@ -1,34 +1,29 @@ -#include #include -#include -#include -#include +#include +#include +/* NOTE: NOT thread-safe */ FILE *tmpfile(void) -{ char *name; - FILE *file; - BPTR dirlock,filelock,cd; - static unsigned long filecount=0; - name=malloc(32); /* buffer for filename */ - if(name!=NULL) - { dirlock=Lock("T:",ACCESS_READ); /* lock T: directory */ - if(dirlock!=0) - { cd=CurrentDir(dirlock); /* cd T: */ - do /* generate a filename that doesn't exist */ - { sprintf(name,"tempfile_1_%p_%lu",FindTask(NULL),filecount++); - filelock=Lock(name,ACCESS_WRITE); - if(filelock!=0) - UnLock(filelock); - }while(filelock!=0||IoErr()==ERROR_OBJECT_IN_USE); - file=fopen(name,"wb+"); - CurrentDir(cd); - if(file!=NULL) - { file->tmpdir=dirlock; - file->name=name; - return file; } - UnLock(dirlock); +{ + char *name = malloc(PATH_MAX); + FILE *file; + + if (name == NULL) + goto error; + + if (tmpnam(name) == NULL) { + goto error; } - free(name); - } - return NULL; + + file = fopen(name,"w+b"); + if (file == NULL) + goto error; + + file->name = name; + return file; +error: + if (name != NULL) + free(name); + + return NULL; }