- Currently, SearchPathW fails with path such as subdir\binary.exe. This patch is...
authorDmitry Chapyshev <dmitry@reactos.org>
Wed, 15 Jul 2009 15:27:59 +0000 (15:27 +0000)
committerDmitry Chapyshev <dmitry@reactos.org>
Wed, 15 Jul 2009 15:27:59 +0000 (15:27 +0000)
Patch by zefklop (jerome.gardou@laposte.net)
See issue #4697 for more details.

svn path=/trunk/; revision=41971

reactos/dll/win32/kernel32/file/dir.c

index 440d326..aa77adb 100644 (file)
@@ -1006,23 +1006,26 @@ SearchPathW (
         PWCHAR EnvironmentBufferW = NULL;
         PWCHAR AppPathW = NULL;
         WCHAR Buffer;
-        BOOL HasExtension;
+        BOOL HasExtension = FALSE, IsAbsolute = FALSE;
         LPCWSTR p;
         PWCHAR Name;
 
         TRACE("SearchPath\n");
 
-        HasExtension = FALSE;
         p = lpFileName + wcslen(lpFileName);
         while (lpFileName < p &&
                L'\\' != *(p - 1) &&
-               L'/' != *(p - 1) &&
-               L':' != *(p - 1))
+               L'/' != *(p - 1))
         {
                 HasExtension = HasExtension || L'.' == *(p - 1);
+                if (p >= lpFileName && L'\\' == *(p-1))
+                {
+                    if (':' == *p)
+                        IsAbsolute = TRUE;
+                }
                 p--;
         }
-        if (lpFileName < p)
+        if (IsAbsolute)
         {
                 if (HasExtension || NULL == lpExtension)
                 {
@@ -1041,7 +1044,7 @@ SearchPathW (
                         }
                         wcscat(wcscpy(Name, lpFileName), lpExtension);
                 }
-               if (RtlDoesFileExists_U(Name))
+            if (RtlDoesFileExists_U(Name))
                 {
                         retCode = RtlGetFullPathName_U (Name,
                                                         nBufferLength * sizeof(WCHAR),