Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "sal/config.h"
30 : :
31 : : #include "com/sun/star/uno/DeploymentException.hpp"
32 : : #include "com/sun/star/uno/Reference.hxx"
33 : : #include "com/sun/star/uno/XInterface.hpp"
34 : : #include "osl/module.hxx"
35 : : #include "osl/mutex.hxx"
36 : : #include "rtl/ustring.hxx"
37 : : #include "sal/types.h"
38 : :
39 : : #include "paths.hxx"
40 : :
41 : : namespace {
42 : :
43 : : namespace css = com::sun::star;
44 : :
45 : : }
46 : :
47 : 3205 : rtl::OUString cppu::get_this_libpath() {
48 [ + + ][ + - ]: 3205 : static rtl::OUString s_uri;
49 [ + + ]: 3205 : if (s_uri.isEmpty()) {
50 : 843 : rtl::OUString uri;
51 : : osl::Module::getUrlFromAddress(
52 [ + - ]: 843 : reinterpret_cast< oslGenericFunction >(get_this_libpath), uri);
53 : 843 : sal_Int32 i = uri.lastIndexOf('/');
54 [ - + ]: 843 : if (i == -1) {
55 : : throw css::uno::DeploymentException(
56 : : "URI " + uri + " is expected to contain a slash",
57 [ # # ]: 0 : css::uno::Reference< css::uno::XInterface >());
58 : : }
59 : 843 : uri = uri.copy(0, i);
60 [ + - ][ + - ]: 843 : osl::MutexGuard guard(osl::Mutex::getGlobalMutex());
61 [ + - ]: 843 : if (s_uri.isEmpty()) {
62 : 843 : s_uri = uri;
63 [ + - ]: 843 : }
64 : : }
65 : 3205 : return s_uri;
66 : : }
67 : :
68 : 1200 : rtl::OUString cppu::getUnoIniUri() {
69 : : #if defined ANDROID
70 : : // Wouldn't it be lovely to avoid this fugly hard-coding.
71 : : // The problem is that the 'create_bootstrap_macro_expander_factory()'
72 : : // required for bootstrapping services, calls cppu::get_unorc directly
73 : : // instead of re-using the BoostrapHandle from:
74 : : // defaultBootstrap_InitialComponentContext
75 : : // and since rtlBootstrapHandle is not ref-counted doing anything
76 : : // clean here is hardish.
77 : : rtl::OUString uri("file:///assets/program");
78 : : #else
79 [ + - ]: 1200 : rtl::OUString uri(get_this_libpath());
80 : : #endif
81 : 1200 : return uri + "/" SAL_CONFIGFILE("uno");
82 : : }
83 : :
84 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|