Patch to fix kernel/tests/patch.c ... take 2

Paul Millar paulm at astro.gla.ac.uk
Sat Jul 13 11:09:19 CDT 2002


  ChangeLog:
     Removing drive assumptions in the kernel path handling regression 
     tests.

----
Paul Millar
-------------- next part --------------
Index: dlls/kernel/tests/path.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/path.c,v
retrieving revision 1.6
diff -u -r1.6 path.c
--- dlls/kernel/tests/path.c	5 Jul 2002 01:22:28 -0000	1.6
+++ dlls/kernel/tests/path.c	13 Jul 2002 15:52:50 -0000
@@ -38,6 +38,8 @@
 #define NONDIR_SHORT "notadir"
 #define NONDIR_LONG "Non Existant Directory"
 
+#define NOT_A_VALID_DRIVE '@'
+
 static OSVERSIONINFOA version;
 /* the following characters don't work well with GetFullPathNameA
    in Win98.  I don't know if this is a FAT thing, or if it is an OS thing
@@ -326,15 +328,23 @@
        errstr);
   }
 }
-static void test_InitPathA(CHAR *newdir)
+static void test_InitPathA(CHAR *newdir, CHAR *curDrive, CHAR *otherDrive)
 {
   CHAR tmppath[MAX_PATH], /*path to TEMP */
        tmpstr[MAX_PATH],
        tmpstr1[MAX_PATH];
-  DWORD len,len1;
+  DWORD len,len1,drives;
   INT id;
   HANDLE hndl;
 
+  *curDrive = *otherDrive = NOT_A_VALID_DRIVE;
+
+/* Get the current drive letter */
+  if( GetCurrentDirectoryA( MAX_PATH, tmpstr))
+    *curDrive = tmpstr[0];
+  else
+    trace( "Unable to discover current drive, some tests will not be conducted.\n");
+
 /* Test GetTempPathA */
   len=GetTempPathA(MAX_PATH,tmppath);
   ok(len!=0 && len < MAX_PATH,"GetTempPathA failed");
@@ -364,6 +374,15 @@
      "GetTempPath returned '%s' which doesn't match '%s' or '%s'",
      newdir,tmpstr,tmpstr1);
 
+/* Find first valid drive letter that is neither newdir[0] nor curDrive */
+  drives = GetLogicalDrives() & ~(1<<(newdir[0]-'A'));
+  if( *curDrive != NOT_A_VALID_DRIVE)
+    drives &= ~(1<<(*curDrive-'A'));
+  if( drives)
+    for( *otherDrive='A'; (drives & 1) == 0; drives>>=1, (*otherDrive)++);
+  else
+    trace( "Could not find alternative drive, some tests will not be conducted.\n");
+
 /* Do some CreateDirectoryA tests */
 /* It would be nice to do test the SECURITY_ATTRIBUTES, but I don't
    really understand how they work.
@@ -478,7 +497,7 @@
 }
 
 /* This routine will test Get(Full|Short|Long)PathNameA */
-static void test_PathNameA(CHAR *curdir)
+static void test_PathNameA(CHAR *curdir, CHAR curDrive, CHAR otherDrive)
 {
   CHAR curdir_short[MAX_PATH],
        longdir_short[MAX_PATH];
@@ -658,12 +677,14 @@
        passfail.longerror);
   }
 /* Test GetFullPathNameA with drive letters */
-  sprintf(tmpstr,"C:\\%s\\%s",SHORTDIR,SHORTFILE);
-  ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
-  ok(lstrcmpiA(tmpstr,tmpstr1)==0,
-      "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
-  ok(lstrcmpiA(SHORTFILE,strptr)==0,
-      "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
+  if( curDrive != NOT_A_VALID_DRIVE) {
+    sprintf(tmpstr,"%c:\\%s\\%s",curDrive,SHORTDIR,SHORTFILE);
+    ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
+    ok(lstrcmpiA(tmpstr,tmpstr1)==0,
+       "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
+    ok(lstrcmpiA(SHORTFILE,strptr)==0,
+       "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
+  }
 /* Without a leading slash, insert the current directory if on the current drive */
   sprintf(tmpstr,"%c:%s\\%s",curdir[0],SHORTDIR,SHORTFILE);
   ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
@@ -673,22 +694,26 @@
   ok(lstrcmpiA(SHORTFILE,strptr)==0,
       "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
 /* Otherwise insert the missing leading slash */
-  sprintf(tmpstr,"D:%s\\%s",SHORTDIR,SHORTFILE);
-  ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
-  sprintf(tmpstr,"D:\\%s\\%s",SHORTDIR,SHORTFILE);
-  ok(lstrcmpiA(tmpstr,tmpstr1)==0,
-      "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
-  ok(lstrcmpiA(SHORTFILE,strptr)==0,
-      "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
+  if( otherDrive != NOT_A_VALID_DRIVE) {
+    sprintf(tmpstr,"%c:%s\\%s",otherDrive,SHORTDIR,SHORTFILE);
+    ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed for %s", tmpstr);
+    sprintf(tmpstr,"%c:\\%s\\%s",otherDrive,SHORTDIR,SHORTFILE);
+    ok(lstrcmpiA(tmpstr,tmpstr1)==0,
+       "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
+    ok(lstrcmpiA(SHORTFILE,strptr)==0,
+       "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
+  }
 /* Xilinx tools like to mix Unix and DOS formats, which Windows handles fine.
    So test for them. */
-  sprintf(tmpstr,"C:/%s\\%s",SHORTDIR,SHORTFILE);
-  ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
-  sprintf(tmpstr,"C:\\%s\\%s",SHORTDIR,SHORTFILE);
-  ok(lstrcmpiA(tmpstr,tmpstr1)==0,
-      "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
-  ok(lstrcmpiA(SHORTFILE,strptr)==0,
-      "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
+  if( curDrive != NOT_A_VALID_DRIVE) {
+    sprintf(tmpstr,"%c:/%s\\%s",curDrive,SHORTDIR,SHORTFILE);
+    ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
+    sprintf(tmpstr,"%c:\\%s\\%s",curDrive,SHORTDIR,SHORTFILE);
+    ok(lstrcmpiA(tmpstr,tmpstr1)==0,
+       "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
+    ok(lstrcmpiA(SHORTFILE,strptr)==0,
+       "GetLongPathNameA returned part '%s' instead of '%s'",strptr,SHORTFILE);
+  }
 /**/
   sprintf(tmpstr,"%c:%s/%s",curdir[0],SHORTDIR,SHORTFILE);
   ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
@@ -702,9 +727,11 @@
   sprintf(tmpstr,"/%s/%s",SHORTDIR,SHORTFILE);
   ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed");
   todo_wine {
-    sprintf(tmpstr,"C:\\%s\\%s",SHORTDIR,SHORTFILE);
-    ok(lstrcmpiA(tmpstr,tmpstr1)==0,
-        "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
+    if( curDrive != NOT_A_VALID_DRIVE) {
+      sprintf(tmpstr,"C:\\%s\\%s",SHORTDIR,SHORTFILE);
+      ok(lstrcmpiA(tmpstr,tmpstr1)==0,
+	 "GetLongPathNameA returned '%s' instead of '%s'",tmpstr1,tmpstr);
+    }
   }
 /* This passes in Wine because it still contains the pointer from the previous test */
   ok(lstrcmpiA(SHORTFILE,strptr)==0,
@@ -770,13 +797,13 @@
 
 START_TEST(path)
 {
-    CHAR origdir[MAX_PATH],curdir[MAX_PATH];
+    CHAR origdir[MAX_PATH],curdir[MAX_PATH], curDrive, otherDrive;
     version.dwOSVersionInfoSize=sizeof(OSVERSIONINFOA);
     ok(GetVersionExA(&version),"GetVersionEx failed: %ld",GetLastError());
     pGetLongPathNameA = (void*)GetProcAddress( GetModuleHandleA("kernel32.dll"),
                                                "GetLongPathNameA" );
-    test_InitPathA(curdir);
+    test_InitPathA(curdir, &curDrive, &otherDrive);
     test_CurrentDirectoryA(origdir,curdir);
-    test_PathNameA(curdir);
+    test_PathNameA(curdir, curDrive, otherDrive);
     test_CleanupPathA(origdir,curdir);
 }


More information about the wine-patches mailing list