From bfb7dae4a28bcae6373213ff599ffcb4b2d30d95 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Wed, 15 Jul 2009 15:27:59 +0000 Subject: [PATCH] - 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@laposte.net) See issue #4697 for more details. svn path=/trunk/; revision=41971 --- reactos/dll/win32/kernel32/file/dir.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/dir.c b/reactos/dll/win32/kernel32/file/dir.c index 440d326e879..aa77adb47f7 100644 --- a/reactos/dll/win32/kernel32/file/dir.c +++ b/reactos/dll/win32/kernel32/file/dir.c @@ -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),