[Libreoffice-commits] core.git: sal/inc sal/osl sal/rtl

Stephan Bergmann sbergman at redhat.com
Thu Nov 27 02:55:52 PST 2014


 sal/inc/getexecutablefile.hxx |   44 ------------------------------------------
 sal/osl/unx/process_impl.cxx  |   37 ++++++++++++++++-------------------
 sal/osl/w32/process.cxx       |   32 ++++++++++--------------------
 sal/rtl/bootstrap.cxx         |    6 +----
 4 files changed, 30 insertions(+), 89 deletions(-)

New commits:
commit 41565560250294e22fc1c21bc4bab8286255d4cc
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Nov 27 11:48:34 2014 +0100

    Make osl_getExecutableFile work even without a prior osl_setCommandArgs
    
    After 2ad716f406e0fdb9b9294876c64ae92fecbf5e27 "Revert 'pyuno: set up fake
    command line in getComponentContext(),'" e.g. PythonTest_sw_python would fail on
    Windows, where WinSalGraphics::GetDevFontList (vcl/win/source/gdi/salgdi3.cxx)
    calls osl_getExecutableFile and is itself called in a python process where
    osl_setCommandArgs has not been set up.
    
    This patch makes osl_getExecutableFile on all platforms if osl_setCommandArgs
    has not (yet) been set fall back to the code that was
    osl_bootstrap_getExecutableFile_Impl (which was called from
    sal/rtl/bootstrap.cxx, which can now call osl_getExecutableFile).
    
    Change-Id: I6c1bb59205041b3208c830a8b8406e28128b4566

diff --git a/sal/inc/getexecutablefile.hxx b/sal/inc/getexecutablefile.hxx
deleted file mode 100644
index 9ebf872..0000000
--- a/sal/inc/getexecutablefile.hxx
+++ /dev/null
@@ -1,44 +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 .
- */
-
-#ifndef INCLUDED_SAL_INC_GETEXECUTABLEFILE_HXX
-#define INCLUDED_SAL_INC_GETEXECUTABLEFILE_HXX
-
-#include <sal/config.h>
-
-#include <osl/process.h>
-#include <rtl/ustring.h>
-#include <sal/types.h>
-
-/***************************************
-  osl_bootstrap_getExecutableFile_Impl().
-
-  @internal
-  @see rtl_bootstrap
-  @see #i37371#
-
- **************************************/
-
-extern "C" oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
-    rtl_uString ** ppFileURL
-) SAL_THROW_EXTERN_C();
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx
index 0936b38..7d8cc81 100644
--- a/sal/osl/unx/process_impl.cxx
+++ b/sal/osl/unx/process_impl.cxx
@@ -34,7 +34,6 @@
 #include "file_path_helper.hxx"
 
 #include "uunxapi.hxx"
-#include "getexecutablefile.hxx"
 #include "nlsupport.hxx"
 
 #ifdef ANDROID
@@ -44,9 +43,9 @@
 #if defined(MACOSX) || defined(IOS)
 #include <mach-o/dyld.h>
 
-oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
-    rtl_uString ** ppFileURL
-) SAL_THROW_EXTERN_C()
+namespace {
+
+oslProcessError SAL_CALL bootstrap_getExecutableFile(rtl_uString ** ppFileURL)
 {
     oslProcessError result = osl_Process_E_NotFound;
 
@@ -83,12 +82,14 @@ oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
     return (result);
 }
 
+}
+
 #else
 #include <dlfcn.h>
 
-oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
-    rtl_uString ** ppFileURL
-) SAL_THROW_EXTERN_C()
+namespace {
+
+oslProcessError SAL_CALL bootstrap_getExecutableFile(rtl_uString ** ppFileURL)
 {
     oslProcessError result = osl_Process_E_NotFound;
 
@@ -110,13 +111,11 @@ oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
         }
     }
 
-    /* Fallback to ordinary osl_getExecutableFile(). */
-    if (result == osl_Process_E_NotFound)
-        result = osl_getExecutableFile (ppFileURL);
-
     return (result);
 }
 
+}
+
 #endif
 
 /***************************************
@@ -141,19 +140,17 @@ static struct CommandArgs_Impl g_command_args =
  **************************************/
 oslProcessError SAL_CALL osl_getExecutableFile (rtl_uString ** ppustrFile)
 {
-    oslProcessError result = osl_Process_E_NotFound;
-
     pthread_mutex_lock (&(g_command_args.m_mutex));
-    OSL_ASSERT(g_command_args.m_nCount > 0);
-    if (g_command_args.m_nCount > 0)
+    if (g_command_args.m_nCount == 0)
     {
-        /* CommandArgs set. Obtain argv[0]. */
-        rtl_uString_assign (ppustrFile, g_command_args.m_ppArgs[0]);
-        result = osl_Process_E_None;
+        pthread_mutex_unlock (&(g_command_args.m_mutex));
+        return bootstrap_getExecutableFile(ppustrFile);
     }
-    pthread_mutex_unlock (&(g_command_args.m_mutex));
 
-    return (result);
+    /* CommandArgs set. Obtain argv[0]. */
+    rtl_uString_assign (ppustrFile, g_command_args.m_ppArgs[0]);
+    pthread_mutex_unlock (&(g_command_args.m_mutex));
+    return osl_Process_E_None;
 }
 
 /***************************************
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx
index 23180af..49259e0 100644
--- a/sal/osl/w32/process.cxx
+++ b/sal/osl/w32/process.cxx
@@ -37,7 +37,6 @@
 #include <osl/thread.h>
 #include <sal/log.hxx>
 
-#include "getexecutablefile.hxx"
 #include "procimpl.h"
 #include "sockimpl.h"
 #include "file_url.h"
@@ -205,18 +204,9 @@ oslProcessError SAL_CALL osl_joinProcessWithTimeout(oslProcess Process, const Ti
     return osl_error;
 }
 
-/***************************************************************************
- * osl_bootstrap_getExecutableFile_Impl().
- *
- * @internal
- * @see rtl_bootstrap
- * @see #i37371#
- *
- ***************************************************************************/
+namespace {
 
-extern "C" oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
-    rtl_uString ** ppFileURL
-) SAL_THROW_EXTERN_C()
+oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL)
 {
     oslProcessError result = osl_Process_E_NotFound;
 
@@ -242,6 +232,8 @@ extern "C" oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
     return (result);
 }
 
+}
+
 /***************************************************************************
  * Command Line Arguments.
  ***************************************************************************/
@@ -315,19 +307,17 @@ static rtl_uString ** osl_createCommandArgs_Impl (int argc, char **)
 
 oslProcessError SAL_CALL osl_getExecutableFile( rtl_uString **ppustrFile )
 {
-    oslProcessError result = osl_Process_E_NotFound;
-
     osl_acquireMutex (*osl_getGlobalMutex());
-    OSL_ASSERT(g_command_args.m_nCount > 0);
-    if (g_command_args.m_nCount > 0)
+    if (g_command_args.m_nCount == 0)
     {
-        /* CommandArgs set. Obtain arv[0]. */
-        rtl_uString_assign (ppustrFile, g_command_args.m_ppArgs[0]);
-        result = osl_Process_E_None;
+        osl_releaseMutex (*osl_getGlobalMutex());
+        return bootstrap_getExecutableFile(ppustrFile);
     }
-    osl_releaseMutex (*osl_getGlobalMutex());
 
-    return (result);
+    /* CommandArgs set. Obtain arv[0]. */
+    rtl_uString_assign (ppustrFile, g_command_args.m_ppArgs[0]);
+    osl_releaseMutex (*osl_getGlobalMutex());
+    return osl_Process_E_None;
 }
 
 /***************************************************************************/
diff --git a/sal/rtl/bootstrap.cxx b/sal/rtl/bootstrap.cxx
index f248819..39b7665 100644
--- a/sal/rtl/bootstrap.cxx
+++ b/sal/rtl/bootstrap.cxx
@@ -42,8 +42,6 @@
 #include <boost/unordered_map.hpp>
 #include <list>
 
-#include "getexecutablefile.hxx"
-
 #ifdef ANDROID
 #include <osl/detail/android-bootstrap.h>
 #endif
@@ -216,7 +214,7 @@ static bool getFromCommandLineArgs(
 static void getExecutableDirectory_Impl (rtl_uString ** ppDirURL)
 {
     OUString fileName;
-    osl_bootstrap_getExecutableFile_Impl (&(fileName.pData));
+    osl_getExecutableFile(&(fileName.pData));
 
     sal_Int32 nDirEnd = fileName.lastIndexOf('/');
     OSL_ENSURE(nDirEnd >= 0, "Cannot locate executable directory");
@@ -254,7 +252,7 @@ static OUString & getIniFileName_Impl()
         }
         else
         {
-            osl_bootstrap_getExecutableFile_Impl (&(fileName.pData));
+            osl_getExecutableFile(&(fileName.pData));
 
             // get rid of a potential executable extension
             OUString progExt = ".bin";


More information about the Libreoffice-commits mailing list