msvcrt _tempname (Resent)

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Sat Feb 15 12:46:26 CST 2003


Changelog
	dlls/msvcrt/file.c
	Make _tempnam behave like native dll

Test for _wtempnam not yet done.
-- 
Uwe Bonnes                bon at elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/msvcrt/file.c
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/file.c,v
retrieving revision 1.46
diff -u -r1.46 file.c
--- wine/dlls/msvcrt/file.c	11 Jan 2003 21:01:04 -0000	1.46
+++ wine/dlls/msvcrt/file.c	15 Feb 2003 18:39:00 -0000
@@ -1352,15 +1352,31 @@
 char *_tempnam(const char *dir, const char *prefix)
 {
   char tmpbuf[MAX_PATH];
+  char dirname[MAX_PATH];
 
-  TRACE("dir (%s) prefix (%s)\n",dir,prefix);
-  if (GetTempFileNameA(dir,prefix,0,tmpbuf))
-  {
-    TRACE("got name (%s)\n",tmpbuf);
-    return _strdup(tmpbuf);
-  }
+  if ( (GetEnvironmentVariableA("TMP",dirname,MAX_PATH) )
+      && (GetTempFileNameA(dirname,prefix,0,tmpbuf)))
+    goto done;
+  if ( (dir) && lstrcpynA(dirname, dir,MAX_PATH) 
+       && (GetTempFileNameA(dirname,prefix,0,tmpbuf)))
+    goto done;
+#ifdef  P_tmpdir
+  if ( (dir) && lstrcpynA(dirname, P_tmpdir,MAX_PATH) 
+       && (GetTempFileNameA(dirname,prefix,0,tmpbuf)))
+    goto done;
+#endif 
+  if ( (GetEnvironmentVariableA("PWD",dirname,MAX_PATH) )
+      && (GetTempFileNameA(dirname,prefix,0,tmpbuf)))
+    goto done;
+  
   TRACE("failed (%ld)\n",GetLastError());
   return NULL;
+
+ done:
+  TRACE("got name (%s)\n",tmpbuf);
+  DeleteFileA(tmpbuf);
+  return _strdup(tmpbuf);
+
 }
 
 /*********************************************************************
@@ -1369,15 +1385,32 @@
 MSVCRT_wchar_t *_wtempnam(const MSVCRT_wchar_t *dir, const MSVCRT_wchar_t *prefix)
 {
   MSVCRT_wchar_t tmpbuf[MAX_PATH];
+  WCHAR dirname[MAX_PATH];
+  WCHAR tmp_env[] = {'T','M','P',0};
+  WCHAR pwd_env[] = {'P','W','D',0};
 
-  TRACE("dir (%s) prefix (%s)\n",debugstr_w(dir),debugstr_w(prefix));
-  if (GetTempFileNameW(dir,prefix,0,tmpbuf))
-  {
-    TRACE("got name (%s)\n",debugstr_w(tmpbuf));
-    return _wcsdup(tmpbuf);
-  }
+  if ( (GetEnvironmentVariableW(tmp_env,dirname,MAX_PATH) )
+      && (GetTempFileNameW(dirname,prefix,0,tmpbuf)))
+    goto done;
+  if ( (dir) && lstrcpynW(dirname, dir,MAX_PATH) 
+       && (GetTempFileNameW(dirname,prefix,0,tmpbuf)))
+    goto done;
+#ifdef  _wP_tmpdir
+  if ( (dir) && lstrcpynW(dirname, _wP_tmpdir,MAX_PATH) 
+       && (GetTempFileNameW(dirname,prefix,0,tmpbuf)))
+    goto done;
+#endif
+  if ( (GetEnvironmentVariableW(pwd_env,dirname,MAX_PATH) )
+      && (GetTempFileNameW(dirname,prefix,0,tmpbuf)))
+    goto done;
+  
   TRACE("failed (%ld)\n",GetLastError());
+  DeleteFileW(tmpbuf);
   return NULL;
+
+done:
+  TRACE("got name (%s)\n",debugstr_w(tmpbuf));
+  return _wcsdup(tmpbuf);
 }
 
 /*********************************************************************



More information about the wine-patches mailing list