diff options
Diffstat (limited to 'desktop/win32/source/extendloaderenvironment.cxx')
-rw-r--r-- | desktop/win32/source/extendloaderenvironment.cxx | 57 |
1 files changed, 12 insertions, 45 deletions
diff --git a/desktop/win32/source/extendloaderenvironment.cxx b/desktop/win32/source/extendloaderenvironment.cxx index 2d1f09adbff9..8a313f2e18c0 100644 --- a/desktop/win32/source/extendloaderenvironment.cxx +++ b/desktop/win32/source/extendloaderenvironment.cxx @@ -111,63 +111,30 @@ void extendLoaderEnvironment(WCHAR * binPath, WCHAR * iniDirectory) { nameEnd[-1] = 'n'; tools::buildPath(binPath, iniDirectory, iniDirEnd, name, nameEnd - name); *iniDirEnd = L'\0'; - WCHAR path[MAX_PATH]; - WCHAR * pathEnd = tools::buildPath( - path, iniDirectory, iniDirEnd, MY_STRING(L"..\\basis-link")); - if (pathEnd == NULL) { - fail(); - } std::size_t const maxEnv = 32767; - WCHAR pad[2 * MAX_PATH + maxEnv]; + WCHAR pad[MAX_PATH + maxEnv]; // hopefully std::size_t is large enough to not overflow - WCHAR * padEnd = NULL; - WCHAR env[maxEnv]; - DWORD n = GetEnvironmentVariableW(L"PATH", env, maxEnv); - if ((n >= maxEnv || n == 0) && GetLastError() != ERROR_ENVVAR_NOT_FOUND) { - fail(); - } - env[n] = L'\0'; - bool exclude1; - pathEnd = tools::resolveLink(path); + WCHAR * pathEnd = tools::buildPath( + pad, iniDirectory, iniDirEnd, MY_STRING(L"..\\ure-link")); if (pathEnd == NULL) { - if (GetLastError() != ERROR_FILE_NOT_FOUND) { - fail(); - } - // This path is only taken by testtool.exe in basis program directory; - // its PATH needs to include the brand program directory: - pathEnd = tools::buildPath( - path, iniDirectory, iniDirEnd, MY_STRING(L"..")); - if (pathEnd == NULL) { - fail(); - } - padEnd = tools::buildPath( - pad, path, pathEnd, MY_STRING(L"\\..\\program")); - if (padEnd == NULL) { - fail(); - } - exclude1 = contains(env, pad, padEnd); - } else { - exclude1 = true; + fail(); } - WCHAR * pad2 = exclude1 ? pad : padEnd + 1; - pathEnd = tools::buildPath(path, path, pathEnd, MY_STRING(L"\\ure-link")); + pathEnd = tools::resolveLink(pad); if (pathEnd == NULL) { fail(); } - pathEnd = tools::resolveLink(path); + pathEnd = tools::buildPath(pad, pad, pathEnd, MY_STRING(L"\\bin")); if (pathEnd == NULL) { fail(); } - padEnd = tools::buildPath(pad2, path, pathEnd, MY_STRING(L"\\bin")); - if (padEnd == NULL) { + WCHAR env[maxEnv]; + DWORD n = GetEnvironmentVariableW(L"PATH", env, maxEnv); + if ((n >= maxEnv || n == 0) && GetLastError() != ERROR_ENVVAR_NOT_FOUND) { fail(); } - bool exclude2 = contains(env, pad2, padEnd); - if (!(exclude1 && exclude2)) { - if (!(exclude1 || exclude2)) { - pad2[-1] = L';'; - } - WCHAR * p = exclude2 ? pad2 - 1 : padEnd; + env[n] = L'\0'; + if (!contains(env, pad, pathEnd)) { + WCHAR * p = pathEnd; if (n != 0) { *p++ = L';'; } |