Author: dchapyshev
Date: Wed Jul 15 17:27:59 2009
New Revision: 41971
URL: 
http://svn.reactos.org/svn/reactos?rev=41971&view=rev
Log:
- Currently, SearchPathW fails with path such as subdir\binary.exe. This patch is there to
address it. It permits VBoxService to launch, and probably others.
Patch by zefklop (jerome.gardou(a)laposte.net)
See issue #4697 for more details.
Modified:
    trunk/reactos/dll/win32/kernel32/file/dir.c
Modified: trunk/reactos/dll/win32/kernel32/file/dir.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/file/di…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/file/dir.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/file/dir.c [iso-8859-1] Wed Jul 15 17:27:59 2009
@@ -1006,23 +1006,26 @@
         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 @@
                         }
                         wcscat(wcscpy(Name, lpFileName), lpExtension);
                 }
-               if (RtlDoesFileExists_U(Name))
+            if (RtlDoesFileExists_U(Name))
                 {
                         retCode = RtlGetFullPathName_U (Name,
                                                         nBufferLength * sizeof(WCHAR),