summaryrefslogtreecommitdiff
path: root/cli_ure/source/native/native_bootstrap.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cli_ure/source/native/native_bootstrap.cxx')
-rw-r--r--cli_ure/source/native/native_bootstrap.cxx436
1 files changed, 0 insertions, 436 deletions
diff --git a/cli_ure/source/native/native_bootstrap.cxx b/cli_ure/source/native/native_bootstrap.cxx
deleted file mode 100644
index fe3280a8e..000000000
--- a/cli_ure/source/native/native_bootstrap.cxx
+++ /dev/null
@@ -1,436 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// Use UNICODE Windows and C API.
-#define _UNICODE
-#define UNICODE
-
-#ifdef _MSC_VER
-#pragma warning(push, 1)
-#endif
-#include <windows.h>
-#include "uno/environment.hxx"
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-#include <tchar.h>
-
-#include "native_share.h"
-
-#include "rtl/bootstrap.hxx"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "cppuhelper/bootstrap.hxx"
-#include <delayimp.h>
-#include <stdio.h>
-
-using namespace ::rtl;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-namespace cli_ure {
- WCHAR * resolveLink(WCHAR * path);
-}
-
-#define INSTALL_PATH L"Software\\LibreOffice\\UNO\\InstallPath"
-#define BASIS_LINK L"\\basis-link"
-#define URE_LINK L"\\ure-link"
-#define URE_BIN L"\\bin"
-#define UNO_PATH L"UNO_PATH"
-
-namespace
-{
-
- /*
- * Gets the installation path from the Windows Registry for the specified
- * registry key.
- *
- * @param hroot open handle to predefined root registry key
- * @param subKeyName name of the subkey to open
- *
- * @return the installation path or NULL, if no installation was found or
- * if an error occurred
- */
-WCHAR* getPathFromRegistryKey( HKEY hroot, LPCWSTR subKeyName )
-{
- HKEY hkey;
- DWORD type;
- TCHAR* data = NULL;
- DWORD size;
-
- /* open the specified registry key */
- if ( RegOpenKeyEx( hroot, subKeyName, 0, KEY_READ, &hkey ) != ERROR_SUCCESS )
- {
- return NULL;
- }
-
- /* find the type and size of the default value */
- if ( RegQueryValueEx( hkey, NULL, NULL, &type, NULL, &size) != ERROR_SUCCESS )
- {
- RegCloseKey( hkey );
- return NULL;
- }
-
- /* get memory to hold the default value */
- data = new WCHAR[size];
-
- /* read the default value */
- if ( RegQueryValueEx( hkey, NULL, NULL, &type, (LPBYTE) data, &size ) != ERROR_SUCCESS )
- {
- RegCloseKey( hkey );
- return NULL;
- }
-
- /* release registry key handle */
- RegCloseKey( hkey );
-
- return data;
-}
-
-/* If the path does not end with '\' the las segment will be removed.
- path: C:\a\b
- -> C:\a
- @param io_path
- in/out parameter. The string is not reallocated. Simply a '\0'
- will be inserted to shorten the string.
-*/
-void oneDirUp(LPTSTR io_path)
-{
- WCHAR * pEnd = io_path + lstrlen(io_path) - 1;
- while (pEnd > io_path //prevent crashing if provided string does not contain a backslash
- && *pEnd != L'\\')
- pEnd --;
- *pEnd = L'\0';
-}
-
-
-/* Returns the path to the program folder of the brand layer,
- for example c:/openoffice.org 3/program
- This path is either obtained from the environment variable UNO_PATH
- or the registry item
- "Software\\OpenOffice.org\\UNO\\InstallPath"
- either in HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE
- The return value must be freed with delete[]
-*/
-WCHAR * getInstallPath()
-{
- WCHAR * szInstallPath = NULL;
-
- DWORD cChars = GetEnvironmentVariable(UNO_PATH, NULL, 0);
- if (cChars > 0)
- {
- szInstallPath = new WCHAR[cChars];
- cChars = GetEnvironmentVariable(UNO_PATH, szInstallPath, cChars);
- //If PATH is not set then it is no error
- if (cChars == 0)
- {
- delete[] szInstallPath;
- return NULL;
- }
- }
-
- if (! szInstallPath)
- {
- szInstallPath = getPathFromRegistryKey( HKEY_CURRENT_USER, INSTALL_PATH );
- if ( szInstallPath == NULL )
- {
- /* read the key's default value from HKEY_LOCAL_MACHINE */
- szInstallPath = getPathFromRegistryKey( HKEY_LOCAL_MACHINE, INSTALL_PATH );
- }
- }
- return szInstallPath;
-}
-
-/* Returns the path to the URE/bin path, where cppuhelper lib resides.
- The returned string must be freed with delete[]
-*/
-WCHAR* getUnoPath()
-{
- WCHAR * szLinkPath = NULL;
- WCHAR * szUrePath = NULL;
- WCHAR * szUreBin = NULL; //the return value
-
- WCHAR * szInstallPath = getInstallPath();
- if (szInstallPath)
- {
- //build the path tho the basis-link file
- oneDirUp(szInstallPath);
- int sizeLinkPath = lstrlen(szInstallPath) + lstrlen(INSTALL_PATH) + 1;
- if (sizeLinkPath < MAX_PATH)
- sizeLinkPath = MAX_PATH;
- szLinkPath = new WCHAR[sizeLinkPath];
- szLinkPath[0] = L'\0';
- lstrcat(szLinkPath, szInstallPath);
- lstrcat(szLinkPath, BASIS_LINK);
-
- //get the path to the actual Basis folder
- if (cli_ure::resolveLink(szLinkPath))
- {
- //build the path to the ure-link file
- int sizeUrePath = lstrlen(szLinkPath) + lstrlen(URE_LINK) + 1;
- if (sizeUrePath < MAX_PATH)
- sizeUrePath = MAX_PATH;
- szUrePath = new WCHAR[sizeUrePath];
- szUrePath[0] = L'\0';
- lstrcat(szUrePath, szLinkPath);
- lstrcat(szUrePath, URE_LINK);
-
- //get the path to the actual Ure folder
- if (cli_ure::resolveLink(szUrePath))
- {
- //build the path to the URE/bin directory
- szUreBin = new WCHAR[lstrlen(szUrePath) + lstrlen(URE_BIN) + 1];
- szUreBin[0] = L'\0';
- lstrcat(szUreBin, szUrePath);
- lstrcat(szUreBin, URE_BIN);
- }
- }
- }
-#if OSL_DEBUG_LEVEL >=2
- if (szUreBin)
- {
- fwprintf(stdout,L"[cli_cppuhelper]: Path to URE libraries:\n %s \n", szUreBin);
- }
- else
- {
- fwprintf(stdout,L"[cli_cppuhelper]: Failed to determine location of URE.\n");
- }
-#endif
- delete[] szInstallPath;
- delete[] szLinkPath;
- delete[] szUrePath;
- return szUreBin;
-}
-
-
-/*We extend the path to contain the Ure/bin folder,
- so that components can use osl_loadModule with arguments, such as
- "reg3.dll". That is, the arguments are only the library names.
-*/
-void extendPath(LPCWSTR szUreBinPath)
-{
- if (!szUreBinPath)
- return;
-
- WCHAR * sEnvPath = NULL;
- DWORD cChars = GetEnvironmentVariable(L"PATH", sEnvPath, 0);
- if (cChars > 0)
- {
- sEnvPath = new WCHAR[cChars];
- cChars = GetEnvironmentVariable(L"PATH", sEnvPath, cChars);
- //If PATH is not set then it is no error
- if (cChars == 0 && GetLastError() != ERROR_ENVVAR_NOT_FOUND)
- {
- delete[] sEnvPath;
- return;
- }
- }
- //prepare the new PATH. Add the Ure/bin directory at the front.
- //note also adding ';'
- WCHAR * sNewPath = new WCHAR[lstrlen(sEnvPath) + lstrlen(szUreBinPath) + 2];
- sNewPath[0] = L'\0';
- lstrcat(sNewPath, szUreBinPath);
- if (lstrlen(sEnvPath))
- {
- lstrcat(sNewPath, L";");
- lstrcat(sNewPath, sEnvPath);
- }
- BOOL bSet = SetEnvironmentVariable(L"PATH", sNewPath);
-
- delete[] sEnvPath;
- delete[] sNewPath;
-}
-
-
-HMODULE loadFromPath(LPCWSTR sLibName)
-{
- if (sLibName == NULL)
- return NULL;
-
- WCHAR * szUreBinPath = getUnoPath();
- if (!szUreBinPath)
- return NULL;
-
- extendPath(szUreBinPath);
-
- WCHAR* szFullPath = new WCHAR[lstrlen(sLibName) + lstrlen(szUreBinPath) + 2];
- szFullPath[0] = L'\0';
- lstrcat(szFullPath, szUreBinPath);
- lstrcat(szFullPath, L"\\");
- lstrcat(szFullPath, sLibName);
- HMODULE handle = LoadLibraryEx(szFullPath, NULL,
- LOAD_WITH_ALTERED_SEARCH_PATH);
-
- delete[] szFullPath;
- delete[] szUreBinPath;
- return handle;
-}
-
-/*Hook for delayed loading of libraries which this library is linked with.
- This is a failure hook. That is, it is only called when the loading of
- a library failed. It will be called when loading of cppuhelper failed.
- Because we extend the PATH to the URE/bin folder while this function is
- executed (see extendPath), all other libraries are found.
-*/
-extern "C" FARPROC WINAPI delayLoadHook(
- unsigned dliNotify,
- PDelayLoadInfo pdli
- )
-{
- if (dliNotify == dliFailLoadLib)
- {
- LPWSTR szLibName = NULL;
- //Convert the ansi file name to wchar_t*
- int size = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pdli->szDll, -1, NULL, 0);
- if (size > 0)
- {
- szLibName = new WCHAR[size];
- if (! MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pdli->szDll, -1, szLibName, size))
- {
- return 0;
- }
- }
- HANDLE h = loadFromPath(szLibName);
- delete[] szLibName;
- return (FARPROC) h;
- }
- return 0;
-}
-}
-
-ExternC
-PfnDliHook __pfnDliFailureHook2 = delayLoadHook;
-
-namespace uno
-{
-namespace util
-{
-
-/** Bootstrapping native UNO.
-
- Bootstrapping requires the existence of many libraries which are contained
- in an URE installation. To find and load these libraries the Windows
- registry keys HKEY_CURRENT_USER\Software\OpenOffice.org\Layer\URE\1
- and HKEY_LOCAL_MACHINE\Software\OpenOffice.org\Layer\URE\1 are examined.
- These contain a named value UREINSTALLLOCATION which holds a path to the URE
- installation folder.
-*/
-public __sealed __gc class Bootstrap
-{
- inline Bootstrap() {}
-
-public:
-
- /** Bootstraps the initial component context from a native UNO installation.
-
- @see cppuhelper/bootstrap.hxx:defaultBootstrap_InitialComponentContext()
- */
- static ::unoidl::com::sun::star::uno::XComponentContext *
- defaultBootstrap_InitialComponentContext();
-
- /** Bootstraps the initial component context from a native UNO installation.
-
- @param ini_file
- a file URL of an ini file, e.g. uno.ini/unorc. (The ini file must
- reside next to the cppuhelper library)
- @param bootstrap_parameters
- bootstrap parameters (maybe null)
-
- @see cppuhelper/bootstrap.hxx:defaultBootstrap_InitialComponentContext()
- */
- static ::unoidl::com::sun::star::uno::XComponentContext *
- defaultBootstrap_InitialComponentContext(
- ::System::String * ini_file,
- ::System::Collections::IDictionaryEnumerator *
- bootstrap_parameters );
-
- /** Bootstraps the initial component context from a native UNO installation.
-
- @see cppuhelper/bootstrap.hxx:bootstrap()
- */
- static ::unoidl::com::sun::star::uno::XComponentContext *
- bootstrap();
-};
-
-//______________________________________________________________________________
-::unoidl::com::sun::star::uno::XComponentContext *
-Bootstrap::defaultBootstrap_InitialComponentContext(
- ::System::String * ini_file,
- ::System::Collections::IDictionaryEnumerator * bootstrap_parameters )
-{
- if (0 != bootstrap_parameters)
- {
- bootstrap_parameters->Reset();
- while (bootstrap_parameters->MoveNext())
- {
- OUString key(
- String_to_ustring( __try_cast< ::System::String * >(
- bootstrap_parameters->get_Key() ) ) );
- OUString value(
- String_to_ustring( __try_cast< ::System::String * >(
- bootstrap_parameters->get_Value() ) ) );
-
- ::rtl::Bootstrap::set( key, value );
- }
- }
-
- // bootstrap native uno
- Reference< XComponentContext > xContext;
- if (0 == ini_file)
- {
- xContext = ::cppu::defaultBootstrap_InitialComponentContext();
- }
- else
- {
- xContext = ::cppu::defaultBootstrap_InitialComponentContext(
- String_to_ustring( __try_cast< ::System::String * >( ini_file ) ) );
- }
-
- return __try_cast< ::unoidl::com::sun::star::uno::XComponentContext * >(
- to_cli( xContext ) );
-}
-
-//______________________________________________________________________________
-::unoidl::com::sun::star::uno::XComponentContext *
-Bootstrap::defaultBootstrap_InitialComponentContext()
-{
- return defaultBootstrap_InitialComponentContext( 0, 0 );
-}
-
-::unoidl::com::sun::star::uno::XComponentContext * Bootstrap::bootstrap()
-{
- Reference<XComponentContext> xContext = ::cppu::bootstrap();
- return __try_cast< ::unoidl::com::sun::star::uno::XComponentContext * >(
- to_cli( xContext ) );
-
-}
-
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */