diff -Naur gv.orig/src/file.c gv/src/file.c --- gv.orig/src/file.c 2005-08-10 15:33:21 +0400 +++ gv/src/file.c 2007-07-06 18:04:17 +0400 @@ -40,6 +40,10 @@ */ #include "message.h" +#define _GNU_SOURCE +#include +#include +#include #include #include #include @@ -156,6 +160,7 @@ char *baseDirectory; char *baseFilename; { +#if 0 char tempFilename[256]; char *tempFilenameP; char tmpNameBuf[256]; @@ -208,6 +213,34 @@ } SMESSAGE(tempFilename) tempFilenameP = GV_XtNewString(tempFilename); +#else + char *tempFilename; + char *tempFilenameP; + const char *tmpDir = baseDirectory; + const char *tmpName = baseFilename; + + BEGINMESSAGE(file_getTmpFilename) + + if (!tmpDir) + tmpDir = getenv("TMPDIR")?:P_tmpdir; + + if (tmpName) + tmpName = basename (tmpName); + + if (asprintf (&tempFilename, "%s/%s.XXXXXX", tmpDir, tmpName) < 0) + error (EXIT_FAILURE, errno, "file_getTmpFilename: asprintf"); + + { + int fd = mkstemp (tempFilename); + if (fd < 0) + error (EXIT_FAILURE, errno, "file_getTmpFilename: mkstemp: %s", tempFilename); + close (fd); + } + + SMESSAGE(tempFilename) + tempFilenameP = GV_XtNewString(tempFilename); + free (tempFilename); +#endif ENDMESSAGE(file_getTmpFilename) return(tempFilenameP); }