Piotr Caban : msvcrt: Fix _mktemp implementation.
Alexandre Julliard
julliard at winehq.org
Wed Jul 24 14:55:27 CDT 2013
Module: wine
Branch: master
Commit: ce9d4b807e6608c284778f9b524a4071035959d5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ce9d4b807e6608c284778f9b524a4071035959d5
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Jul 24 12:20:29 2013 +0200
msvcrt: Fix _mktemp implementation.
---
dlls/msvcrt/file.c | 16 ++++++++++------
dlls/msvcrt/tests/file.c | 21 +++++++++++++++++++++
2 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 1f17a93..a07e940 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1691,9 +1691,12 @@ char * CDECL MSVCRT__mktemp(char *pattern)
int id;
char letter = 'a';
+ if(!pattern)
+ return NULL;
+
while(*pattern)
numX = (*pattern++ == 'X')? numX + 1 : 0;
- if (numX < 5)
+ if (numX < 6)
return NULL;
pattern--;
id = GetCurrentProcessId();
@@ -1708,8 +1711,7 @@ char * CDECL MSVCRT__mktemp(char *pattern)
do
{
*pattern = letter++;
- if (GetFileAttributesA(retVal) == INVALID_FILE_ATTRIBUTES &&
- GetLastError() == ERROR_FILE_NOT_FOUND)
+ if (GetFileAttributesA(retVal) == INVALID_FILE_ATTRIBUTES)
return retVal;
} while(letter <= 'z');
return NULL;
@@ -1725,9 +1727,12 @@ MSVCRT_wchar_t * CDECL MSVCRT__wmktemp(MSVCRT_wchar_t *pattern)
int id;
MSVCRT_wchar_t letter = 'a';
+ if(!pattern)
+ return NULL;
+
while(*pattern)
numX = (*pattern++ == 'X')? numX + 1 : 0;
- if (numX < 5)
+ if (numX < 6)
return NULL;
pattern--;
id = GetCurrentProcessId();
@@ -1741,8 +1746,7 @@ MSVCRT_wchar_t * CDECL MSVCRT__wmktemp(MSVCRT_wchar_t *pattern)
pattern++;
do
{
- if (GetFileAttributesW(retVal) == INVALID_FILE_ATTRIBUTES &&
- GetLastError() == ERROR_FILE_NOT_FOUND)
+ if (GetFileAttributesW(retVal) == INVALID_FILE_ATTRIBUTES)
return retVal;
*pattern = letter++;
} while(letter != '|');
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 5731437..fc92272 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -2130,6 +2130,26 @@ static void test_stdin(void)
ok(h != NULL, "h == NULL\n");
}
+static void test_mktemp(void)
+{
+ char buf[16];
+
+ strcpy(buf, "a");
+ ok(!_mktemp(buf), "_mktemp(\"a\") != NULL\n");
+
+ strcpy(buf, "testXXXXX");
+ ok(!_mktemp(buf), "_mktemp(\"testXXXXX\") != NULL\n");
+
+ strcpy(buf, "testXXXXXX");
+ ok(_mktemp(buf) != NULL, "_mktemp(\"testXXXXXX\") == NULL\n");
+
+ strcpy(buf, "testXXXXXXa");
+ ok(!_mktemp(buf), "_mktemp(\"testXXXXXXa\") != NULL\n");
+
+ strcpy(buf, "**XXXXXX");
+ ok(_mktemp(buf) != NULL, "_mktemp(\"**XXXXXX\") == NULL\n");
+}
+
START_TEST(file)
{
int arg_c;
@@ -2193,6 +2213,7 @@ START_TEST(file)
test_setmaxstdio();
test_pipes(arg_v[0]);
test_stdin();
+ test_mktemp();
/* Wait for the (_P_NOWAIT) spawned processes to finish to make sure the report
* file contains lines in the correct order
More information about the wine-cvs
mailing list