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