[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.0' - desktop/source

Henry Castro hcastro at collabora.com
Mon Aug 31 20:45:55 PDT 2015


 desktop/source/lib/init.cxx |  159 +++++++-------------------------------------
 1 file changed, 28 insertions(+), 131 deletions(-)

New commits:
commit 718815a1a5d4f12e9d259bf4c605cc9ed89c625f
Author: Henry Castro <hcastro at collabora.com>
Date:   Mon Aug 31 23:43:47 2015 -0400

    lok: use preInitBootstrap
    
    Change-Id: I0e3d7340f664e7d34ae3161d57430250933d6ff1

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 3bc5824..f448a30 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -57,7 +57,6 @@
 #include <unotools/mediadescriptor.hxx>
 #include <osl/module.hxx>
 #include <comphelper/sequence.hxx>
-#include <xmlreader/xmlreader.hxx>
 
 #include <app.hxx>
 
@@ -967,128 +966,6 @@ static void lo_status_indicator_callback(void *data, comphelper::LibreOfficeKit:
     }
 }
 
-static void loadSharedLibrary(const OUString & aUriRdb)
-{
-    int nsId;
-    int nUcNsId;
-
-    OUString sAttrUri;
-    OUString sAttrLoader;
-
-    xmlreader::Span aName;
-    xmlreader::XmlReader::Result aItem = xmlreader::XmlReader::RESULT_BEGIN;
-
-    xmlreader::XmlReader aRdbReader(aUriRdb);
-    nUcNsId = aRdbReader.registerNamespaceIri(xmlreader::Span(RTL_CONSTASCII_STRINGPARAM("http://openoffice.org/2010/uno-components")));
-
-    while( aItem != xmlreader::XmlReader::RESULT_DONE )
-    {
-        aItem = aRdbReader.nextItem(xmlreader::XmlReader::TEXT_NONE, &aName, &nsId );
-        if (nsId == nUcNsId &&
-            aName.equals(RTL_CONSTASCII_STRINGPARAM("component")))
-        {
-            sAttrLoader = OUString();
-            sAttrUri = OUString();
-
-            while (aRdbReader.nextAttribute(&nsId, &aName))
-            {
-                if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
-                    aName.equals(RTL_CONSTASCII_STRINGPARAM("loader")))
-                    sAttrLoader = aRdbReader.getAttributeValue(false).convertFromUtf8();
-                else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
-                    aName.equals(RTL_CONSTASCII_STRINGPARAM("uri")))
-                    sAttrUri = aRdbReader.getAttributeValue(false).convertFromUtf8();
-            }
-
-            try
-            {
-                sAttrUri = cppu::bootstrap_expandUri(sAttrUri);
-            }
-            catch(css::lang::IllegalArgumentException)
-            {
-                fprintf(stderr, "Cannot expand URI '%s'\n",
-                    OUStringToOString(sAttrUri, RTL_TEXTENCODING_UTF8).getStr());
-            }
-
-            if (sAttrLoader == "com.sun.star.loader.SharedLibrary")
-            {
-                oslModule aModule = osl_loadModule( sAttrUri.pData, SAL_LOADMODULE_NOW | SAL_LOADMODULE_GLOBAL );
-                SAL_INFO("lok", "loaded component library " << sAttrUri << ( aModule ? " ok" : " no"));
-
-                // leak aModule
-                // osl_unloadModule(aModule);
-                aModule = 0;
-            }
-        }
-    }
-}
-
-/// pre-load all C++ component factories and leak references to them.
-static void forceLoadAllNativeComponents(const OUString & aAppURL)
-{
-    sal_Int32 nIndex = 0;
-
-    rtl::Bootstrap bs(aAppURL + "/" + SAL_CONFIGFILE("uno"));
-    if (bs.getHandle() == 0)
-    {
-        fprintf(stderr, "Cannot open uno ini '%s'\n",
-                 OUStringToOString(aAppURL + "/" + SAL_CONFIGFILE("uno"), RTL_TEXTENCODING_UTF8).getStr());
-        return;
-    }
-
-    OUString aRdbFiles;
-    if (!bs.getFrom("UNO_SERVICES", aRdbFiles))
-    {
-        fprintf(stderr, "Cannot obtain UNO_SERVICES from uno ini\n");
-        return;
-    }
-
-    while (nIndex != -1)
-    {
-        OUString aUriRdb(aRdbFiles.getToken(0, ' ', nIndex));
-
-        if (aUriRdb.isEmpty())
-            continue;
-
-        if (aUriRdb[0] == '?')
-            aUriRdb = aUriRdb.copy(1);
-
-        if (aUriRdb.startsWith("<") && aUriRdb.endsWith(">*"))
-        {
-            aUriRdb = aUriRdb.copy(1, aUriRdb.getLength() - 3);
-            osl::Directory aDir(aUriRdb);
-
-            if ( aDir.open() == osl::FileBase::E_None )
-            {
-                while(true)
-                {
-                    osl::DirectoryItem aDirItem;
-
-                    if ( aDir.getNextItem(aDirItem, SAL_MAX_UINT32) != osl::FileBase::E_None)
-                        break;
-
-                    osl::FileStatus stat(osl_FileStatus_Mask_Type |
-                                         osl_FileStatus_Mask_FileName |
-                                         osl_FileStatus_Mask_FileURL);
-
-                    if (aDirItem.getFileStatus(stat) == osl::FileBase::E_None)
-                        loadSharedLibrary(stat.getFileURL());
-                }
-            }
-            else
-            {
-                fprintf(stderr, "Cannot open directory '%s'\n",
-                    OUStringToOString(aUriRdb, RTL_TEXTENCODING_UTF8).getStr());
-            }
-
-        }
-        else
-        {
-            loadSharedLibrary(aUriRdb);
-        }
-    }
-}
-
 /// pre-load and parse all filter XML
 static void forceLoadFilterXML()
 {
@@ -1165,12 +1042,6 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
             Application::EnableHeadlessMode(true);
         }
 
-        if (eStage == PRE_INIT)
-        {
-            forceLoadAllNativeComponents(aAppURL);
-            forceLoadFilterXML();
-        }
-
         // This is horrible crack. I really would want to go back to simply just call
         // InitVCL() here. The OfficeIPCThread thing is just horrible.
 
@@ -1254,8 +1125,34 @@ LibreOfficeKit *libreofficekit_hook(const char* install_path)
 SAL_JNI_EXPORT
 int lok_preinit(const char* install_path, const char* user_profile_path)
 {
-    SAL_INFO("lok", "Hello World");
-    return lo_initialize(NULL, install_path, user_profile_path);
+    rtl::Bootstrap::set(OUString("UserInstallation"), OUString(user_profile_path, strlen(user_profile_path), RTL_TEXTENCODING_UTF8));
+
+    OUString aAppPath;
+    if (install_path)
+    {
+        aAppPath = OUString(install_path, strlen(install_path), RTL_TEXTENCODING_UTF8);
+    }
+    else
+    {
+        // Fun conversion dance back and forth between URLs and system paths...
+        OUString aAppURL;
+        ::osl::Module::getUrlFromAddress( reinterpret_cast< oslGenericFunction >(lo_initialize),
+                                          aAppURL);
+        osl::FileBase::getSystemPathFromFileURL( aAppURL, aAppPath );
+    }
+
+    OUString aAppURL;
+    if (osl::FileBase::getFileURLFromSystemPath(aAppPath, aAppURL) != osl::FileBase::E_None)
+        return -1;
+
+
+    rtl::Bootstrap::setIniFilename(aAppURL + "/" SAL_CONFIGFILE("soffice"));
+
+    // pre-load all C++ component factories and leak references to them.
+    cppu::preInitBootstrap();
+    forceLoadFilterXML();
+
+    return 0;
 }
 
 static void lo_destroy(LibreOfficeKit* pThis)


More information about the Libreoffice-commits mailing list