diff options
Diffstat (limited to 'desktop/win32')
-rw-r--r-- | desktop/win32/source/extendloaderenvironment.cxx | 142 | ||||
-rw-r--r-- | desktop/win32/source/guiloader/genericloader.cxx | 4 | ||||
-rw-r--r-- | desktop/win32/source/loader.cxx | 72 | ||||
-rw-r--r-- | desktop/win32/source/loader.hxx (renamed from desktop/win32/source/extendloaderenvironment.hxx) | 8 | ||||
-rw-r--r-- | desktop/win32/source/officeloader/officeloader.cxx | 4 | ||||
-rw-r--r-- | desktop/win32/source/unoinfo.cxx | 30 |
6 files changed, 85 insertions, 175 deletions
diff --git a/desktop/win32/source/extendloaderenvironment.cxx b/desktop/win32/source/extendloaderenvironment.cxx deleted file mode 100644 index 50467638c6cb..000000000000 --- a/desktop/win32/source/extendloaderenvironment.cxx +++ /dev/null @@ -1,142 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> - -#include <cstddef> - -#define WIN32_LEAN_AND_MEAN -#if defined _MSC_VER -#pragma warning(push, 1) -#endif -#include <windows.h> -#include <shlwapi.h> -#if defined _MSC_VER -#pragma warning(pop) -#endif - -#include <tools/pathutils.hxx> - -#include "extendloaderenvironment.hxx" - -namespace { - -void fail() { - LPWSTR buf = NULL; - FormatMessageW( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, - GetLastError(), 0, reinterpret_cast< LPWSTR >(&buf), 0, NULL); - MessageBoxW(NULL, buf, NULL, MB_OK | MB_ICONERROR); - LocalFree(buf); - TerminateProcess(GetCurrentProcess(), 255); -} - -bool contains(WCHAR const * paths, WCHAR const * path, WCHAR const * pathEnd) { - WCHAR const * q = path; - for (WCHAR const * p = paths;; ++p) { - WCHAR c = *p; - switch (c) { - case L'\0': - return q == pathEnd; - case L';': - if (q == pathEnd) { - return true; - } - q = path; - break; - default: - if (q != NULL) { - if (q != pathEnd && *q == c) { - ++q; - } else { - q = NULL; - } - } - break; - } - } -} - -} - -namespace desktop_win32 { - -void extendLoaderEnvironment(WCHAR * binPath, WCHAR * iniDirectory) { - if (!GetModuleFileNameW(NULL, iniDirectory, MAX_PATH)) { - fail(); - } - WCHAR * iniDirEnd = tools::filename(iniDirectory); - WCHAR name[MAX_PATH + MY_LENGTH(L".bin")]; - // hopefully std::size_t is large enough to not overflow - WCHAR * nameEnd = name; - for (WCHAR * p = iniDirEnd; *p != L'\0'; ++p) { - *nameEnd++ = *p; - } - if (!(nameEnd - name >= 4 && nameEnd[-4] == L'.' && - (nameEnd[-3] == L'E' || nameEnd[-3] == L'e') && - (nameEnd[-2] == L'X' || nameEnd[-2] == L'x') && - (nameEnd[-1] == L'E' || nameEnd[-1] == L'e'))) - { - *nameEnd = L'.'; - nameEnd += 4; - } - nameEnd[-3] = 'b'; - nameEnd[-2] = 'i'; - nameEnd[-1] = 'n'; - tools::buildPath(binPath, iniDirectory, iniDirEnd, name, nameEnd - name); - *iniDirEnd = L'\0'; - std::size_t const maxEnv = 32767; - WCHAR pad[MAX_PATH + maxEnv]; - // hopefully std::size_t is large enough to not overflow - WCHAR * pathEnd = tools::buildPath( - pad, iniDirectory, iniDirEnd, MY_STRING(L"..\\ure-link")); - if (pathEnd == NULL) { - fail(); - } - pathEnd = tools::resolveLink(pad); - if (pathEnd == NULL) { - fail(); - } - pathEnd = tools::buildPath(pad, pad, pathEnd, MY_STRING(L"\\bin")); - if (pathEnd == NULL) { - fail(); - } - 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'; - if (!contains(env, pad, pathEnd)) { - WCHAR * p = pathEnd; - if (n != 0) { - *p++ = L';'; - } - for (DWORD i = 0; i <= n; ++i) { - *p++ = env[i]; - } - if (!SetEnvironmentVariableW(L"PATH", pad)) { - fail(); - } - } -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/win32/source/guiloader/genericloader.cxx b/desktop/win32/source/guiloader/genericloader.cxx index 97cc4e98eaec..4c3d94883e6d 100644 --- a/desktop/win32/source/guiloader/genericloader.cxx +++ b/desktop/win32/source/guiloader/genericloader.cxx @@ -38,7 +38,7 @@ #include <systools/win32/uwinapi.h> #include <tools/pathutils.hxx> -#include "../extendloaderenvironment.hxx" +#include "../loader.hxx" @@ -48,7 +48,7 @@ static int GenericMain() TCHAR szIniDirectory[MAX_PATH]; STARTUPINFO aStartupInfo; - desktop_win32::extendLoaderEnvironment(szTargetFileName, szIniDirectory); + desktop_win32::getPaths(szTargetFileName, szIniDirectory); ZeroMemory( &aStartupInfo, sizeof(aStartupInfo) ); aStartupInfo.cb = sizeof(aStartupInfo); diff --git a/desktop/win32/source/loader.cxx b/desktop/win32/source/loader.cxx new file mode 100644 index 000000000000..95327fcdbfad --- /dev/null +++ b/desktop/win32/source/loader.cxx @@ -0,0 +1,72 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/config.h> + +#define WIN32_LEAN_AND_MEAN +#if defined _MSC_VER +#pragma warning(push, 1) +#endif +#include <windows.h> +#include <shlwapi.h> +#if defined _MSC_VER +#pragma warning(pop) +#endif + +#include <tools/pathutils.hxx> + +#include "loader.hxx" + +namespace desktop_win32 { + +void getPaths(WCHAR * binPath, WCHAR * iniDirectory) { + if (!GetModuleFileNameW(NULL, iniDirectory, MAX_PATH)) { + LPWSTR buf = NULL; + FormatMessageW( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, + GetLastError(), 0, reinterpret_cast< LPWSTR >(&buf), 0, NULL); + MessageBoxW(NULL, buf, NULL, MB_OK | MB_ICONERROR); + LocalFree(buf); + TerminateProcess(GetCurrentProcess(), 255); + } + WCHAR * iniDirEnd = tools::filename(iniDirectory); + WCHAR name[MAX_PATH + MY_LENGTH(L".bin")]; + // hopefully std::size_t is large enough to not overflow + WCHAR * nameEnd = name; + for (WCHAR * p = iniDirEnd; *p != L'\0'; ++p) { + *nameEnd++ = *p; + } + if (!(nameEnd - name >= 4 && nameEnd[-4] == L'.' && + (nameEnd[-3] == L'E' || nameEnd[-3] == L'e') && + (nameEnd[-2] == L'X' || nameEnd[-2] == L'x') && + (nameEnd[-1] == L'E' || nameEnd[-1] == L'e'))) + { + *nameEnd = L'.'; + nameEnd += 4; + } + nameEnd[-3] = 'b'; + nameEnd[-2] = 'i'; + nameEnd[-1] = 'n'; + tools::buildPath(binPath, iniDirectory, iniDirEnd, name, nameEnd - name); + *iniDirEnd = L'\0'; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/win32/source/extendloaderenvironment.hxx b/desktop/win32/source/loader.hxx index 386d7ef86dbf..e8a987650036 100644 --- a/desktop/win32/source/extendloaderenvironment.hxx +++ b/desktop/win32/source/loader.hxx @@ -17,8 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_DESKTOP_WIN32_SOURCE_EXTENDLOADERENVIRONMENT_HXX -#define INCLUDED_DESKTOP_WIN32_SOURCE_EXTENDLOADERENVIRONMENT_HXX +#ifndef INCLUDED_DESKTOP_WIN32_SOURCE_LOADER_HXX +#define INCLUDED_DESKTOP_WIN32_SOURCE_LOADER_HXX #include <sal/config.h> @@ -68,8 +68,6 @@ inline WCHAR * commandLineAppendEncoded(WCHAR * buffer, WCHAR const * text) { return buffer; } -// Set the PATH environment variable in the current (loader) process, so that a -// following CreateProcess has the necessary environment: // @param binPath // Must point to an array of size at least MAX_PATH. Is filled with the null // terminated full path to the "bin" file corresponding to the current @@ -78,7 +76,7 @@ inline WCHAR * commandLineAppendEncoded(WCHAR * buffer, WCHAR const * text) { // Must point to an array of size at least MAX_PATH. Is filled with the null // terminated full directory path (ending in "\") to the "ini" file // corresponding to the current executable. -void extendLoaderEnvironment(WCHAR * binPath, WCHAR * iniDirectory); +void getPaths(WCHAR * binPath, WCHAR * iniDirectory); } diff --git a/desktop/win32/source/officeloader/officeloader.cxx b/desktop/win32/source/officeloader/officeloader.cxx index 7f820c23aa6f..7eb14273f0bd 100644 --- a/desktop/win32/source/officeloader/officeloader.cxx +++ b/desktop/win32/source/officeloader/officeloader.cxx @@ -44,7 +44,7 @@ #include <sal/macros.h> #include "../../../source/inc/exithelper.h" -#include "../extendloaderenvironment.hxx" +#include "../loader.hxx" #include <config_version.h> @@ -177,7 +177,7 @@ int WINAPI _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int ) TCHAR szPerfTuneIniFile[MAX_PATH] = TEXT(""); STARTUPINFO aStartupInfo; - desktop_win32::extendLoaderEnvironment(szTargetFileName, szIniDirectory); + desktop_win32::getPaths(szTargetFileName, szIniDirectory); ZeroMemory( &aStartupInfo, sizeof(aStartupInfo) ); aStartupInfo.cb = sizeof(aStartupInfo); diff --git a/desktop/win32/source/unoinfo.cxx b/desktop/win32/source/unoinfo.cxx index 92143f6b525c..5af29df90af7 100644 --- a/desktop/win32/source/unoinfo.cxx +++ b/desktop/win32/source/unoinfo.cxx @@ -79,16 +79,7 @@ int wmain(int argc, wchar_t ** argv, wchar_t **) { #endif wchar_t path[MAX_PATH]; wchar_t * pathEnd = getBrandPath(path); - if (tools::buildPath(path, path, pathEnd, MY_STRING(L"..\\ure-link")) == - NULL) - { - exit(EXIT_FAILURE); - } - pathEnd = tools::resolveLink(path); - if (pathEnd == NULL) { - exit(EXIT_FAILURE); - } - writePath(path, pathEnd, MY_STRING(L"\\bin")); + writePath(path, pathEnd, MY_STRING(L"")); #ifdef __MINGW32__ } else if (argc == 2 && strcmp(argv[1], "java") == 0) { #else @@ -99,24 +90,15 @@ int wmain(int argc, wchar_t ** argv, wchar_t **) { } wchar_t path[MAX_PATH]; wchar_t * pathEnd = getBrandPath(path); - writePath(path, pathEnd, MY_STRING(L"")); + writePath(path, pathEnd, MY_STRING(L"classes\\ridl.jar")); writeNull(); - writePath(path, pathEnd, MY_STRING(L"classes\\unoil.jar")); - if (tools::buildPath(path, path, pathEnd, MY_STRING(L"..\\ure-link")) == - NULL) - { - exit(EXIT_FAILURE); - } - pathEnd = tools::resolveLink(path); - if (pathEnd == NULL) { - exit(EXIT_FAILURE); - } + writePath(path, pathEnd, MY_STRING(L"classes\\jurt.jar")); writeNull(); - writePath(path, pathEnd, MY_STRING(L"\\java\\ridl.jar")); + writePath(path, pathEnd, MY_STRING(L"classes\\juh.jar")); writeNull(); - writePath(path, pathEnd, MY_STRING(L"\\java\\jurt.jar")); + writePath(path, pathEnd, MY_STRING(L"classes\\unoil.jar")); writeNull(); - writePath(path, pathEnd, MY_STRING(L"\\java\\juh.jar")); + writePath(path, pathEnd, MY_STRING(L"")); } else { exit(EXIT_FAILURE); } |