mktmpname now supports WIN32.
authorkramm <kramm>
Sat, 12 Jun 2004 16:06:25 +0000 (16:06 +0000)
committerkramm <kramm>
Sat, 12 Jun 2004 16:06:25 +0000 (16:06 +0000)
pdf2swf/xpdf/gfile.cc

index bf020e7..b4d88cd 100644 (file)
@@ -444,21 +444,49 @@ time_t getModTime(char *fileName) {
 #endif
 }
  
-static char tmpbuf[128];
+static char* getTempDir()
+{
+#ifdef WIN32
+    char*dir = getenv("TMP");
+    if(!dir) dir = getenv("TEMP");
+    if(!dir) dir = getenv("tmp");
+    if(!dir) dir = getenv("temp");
+    if(!dir) dir = "C:\\";
+#else
+    char* dir = "/tmp/";
+#endif
+    return dir;
+}
 
 char* mktmpname(char*ptr) {
+    static char tmpbuf[128];
+    char*dir = getTempDir();
+    int l = strlen(dir);
+    char*sep = "";
+    if(!ptr)
+       ptr = tmpbuf;
+    if(l && dir[l-1]!='/' && dir[l-1]!='\\') {
+#ifdef WIN32
+       sep = "\\";
+#else
+       sep = "/";
+#endif
+    }
+
  //   used to be mktemp. This does remove the warnings, but
  //   It's not exactly an improvement.
 #ifdef HAVE_LRAND48
-    sprintf(tmpbuf, "/tmp/%08x%08x",lrand48(),lrand48());
+    sprintf(ptr, "%s%s%08x%08x",dir,sep,lrand48(),lrand48());
 #else
 #   ifdef HAVE_RAND
-       sprintf(tmpbuf, "/tmp/%08x%08x",rand(),rand());
+       sprintf(ptr, "%s%s%08x%08x",dir,sep,rand(),rand());
 #   else
-       sprintf(tmpbuf, "/tmp/%08x%08x",time(0),(unsigned int)tmpbuf);
+       static int count = 1;
+       sprintf(ptr, "%s%s%08x%04x%04x",dir,sep,time(0),(unsigned int)tmpbuf^((unsigned int)tmpbuf)>>16,count);
+       count ++;
 #   endif
 #endif
-     return tmpbuf;
+     return ptr;
 }
 
 GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) {