GetTempFileName conformance improvements

Mike Hearn mike at theoretic.com
Thu Jan 15 08:53:44 CST 2004


ChangeLog:
- Ensure we correctly add a backslash like Windows 98/XP do
- Generate filenames that look like Windows does (no left digit padding)

Index: files/file.c
===================================================================
RCS file: /home/wine/wine/files/file.c,v
retrieving revision 1.199
diff -u -r1.199 file.c
--- files/file.c        14 Jan 2004 04:34:20 -0000      1.199
+++ files/file.c        15 Jan 2004 14:46:58 -0000
@@ -905,7 +905,7 @@
 UINT WINAPI GetTempFileNameW( LPCWSTR path, LPCWSTR prefix, UINT unique,
                                   LPWSTR buffer )
 {
-    static const WCHAR formatW[] = {'%','0','4','x','.','t','m','p',0};
+    static const WCHAR formatW[] = {'%','x','.','t','m','p',0};
  
     DOS_FULL_NAME full_name;
     int i;
@@ -920,9 +920,8 @@
     strcpyW( buffer, path );
     p = buffer + strlenW(buffer);
  
-    /* add a \, if there isn't one and path is more than just the drive letter ... */
-    if ( !((strlenW(buffer) == 2) && (buffer[1] == ':'))
-       && ((p == buffer) || (p[-1] != '\\'))) *p++ = '\\';
+    /* add a \, if there isn't one  */
+    if ((p == buffer) || (p[-1] != '\\')) *p++ = '\\';
  
     for (i = 3; (i > 0) && (*prefix); i--) *p++ = *prefix++;
  
Index: dlls/kernel/tests/file.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/file.c,v
retrieving revision 1.27
diff -u -r1.27 file.c
--- dlls/kernel/tests/file.c    9 Jan 2004 00:34:37 -0000       1.27
+++ dlls/kernel/tests/file.c    15 Jan 2004 14:47:00 -0000
@@ -618,6 +618,23 @@
     ok(ret, "DeleteFileW: error %ld\n", GetLastError());
 }
  
+
+static void test_GetTempFileNameA() {
+    UINT result;
+    char out[MAX_PATH];
+    char *expected = "c:\\windows\\abc2.tmp";
+
+    /* this test may depend on the config file settings */
+    result = GetTempFileNameA("E:", "abc", 1, out);
+    ok( result != 0, "GetTempFileNameA: error %ld\n", GetLastError() );
+    ok( ((out[0] == 'E') && (out[1] == ':')) && (out[2] == '\\'), "GetTempFileNameA: first three characters should be E:\\, string was actually %s", out );
+
+    result = GetTempFileNameA("c:\\windows\\", "abc", 2, out);
+    ok( result != 0, "GetTempFileNameA: error %ld\n", GetLastError() );
+    ok( strcasecmp( out, expected ) == 0, "GetTempFileNameA: Unexpected output \"%s\" vs \"%s\"\n", out, expected );
+}
+
+
 static void test_DeleteFileA( void )
 {
     BOOL ret;
@@ -972,6 +989,7 @@
     test__llopen(  );
     test__lread(  );
     test__lwrite(  );
+    test_GetTempFileNameA();
     test_CopyFileA();
     test_CopyFileW();
     test_CreateFileA();







More information about the wine-patches mailing list