diff options
author | Jack Leigh <leighman@gmx.se> | 2013-03-05 16:19:58 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-03-12 15:35:34 +0000 |
commit | 07352f07ce40ef40e9b73fd05aa4f9c5eac38290 (patch) | |
tree | 9a0ece5e5781f2a2846a0948f50727ed467278a8 | |
parent | 8887de72c184bec6225a952ec90433ae1b7a5b26 (diff) |
liblibo: move to C++ interface.
Change-Id: Ie14a9446abd9524604feddf811d5373a26a30cbd
-rw-r--r-- | desktop/Library_libreoffice.mk | 6 | ||||
-rw-r--r-- | desktop/inc/liblibreoffice.h | 38 | ||||
-rw-r--r-- | desktop/inc/liblibreoffice.hxx | 30 | ||||
-rw-r--r-- | desktop/inc/liblibreoffice_impl.hxx | 30 | ||||
-rw-r--r-- | desktop/source/lib/init.cxx | 32 | ||||
-rw-r--r-- | desktop/source/lib/shim.cxx | 12 | ||||
-rw-r--r-- | smoketest/libtest.cxx | 6 |
7 files changed, 91 insertions, 63 deletions
diff --git a/desktop/Library_libreoffice.mk b/desktop/Library_libreoffice.mk index a40bbd74f987..96b18a1bee7e 100644 --- a/desktop/Library_libreoffice.mk +++ b/desktop/Library_libreoffice.mk @@ -14,6 +14,12 @@ $(eval $(call gb_Library_set_include,libreoffice,\ -I$(SRCDIR)/desktop/inc \ )) +$(eval $(call gb_Library_add_libs,libreoffice,\ + $(if $(filter $(OS),LINUX), \ + -ldl \ + ) \ +)) + $(eval $(call gb_Library_use_libraries,libreoffice,\ $(gb_UWINAPI) \ )) diff --git a/desktop/inc/liblibreoffice.h b/desktop/inc/liblibreoffice.h deleted file mode 100644 index dde50cec88e1..000000000000 --- a/desktop/inc/liblibreoffice.h +++ /dev/null @@ -1,38 +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/. - */ - -/* - * A simple C API to setup and use libreoffice - */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - int errno; - char *message; -} LOError; - -typedef int loboolean; -typedef struct _LODocument LODocument; - -loboolean lo_initialize (const char *install_path); - -void lo_error_free (LOError *error); -LOError *lo_error_new (int errno, const char *message); - -LODocument *lo_document_load (const char *url, LOError **opt_error); -loboolean lo_document_save (const char *url, LOError **opt_error); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ - diff --git a/desktop/inc/liblibreoffice.hxx b/desktop/inc/liblibreoffice.hxx new file mode 100644 index 000000000000..74f6769944e4 --- /dev/null +++ b/desktop/inc/liblibreoffice.hxx @@ -0,0 +1,30 @@ +/* -*- 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/. + */ + +#ifndef _LIBLIBREOFFICE_HXX +#define _LIBLIBREOFFICE_HXX + +typedef int loboolean; +typedef struct _LODocument LODocument; + +class LibLibreOffice +{ +public: + virtual loboolean initialize (const char *installPath) = 0; + + virtual LODocument *documentLoad (const char *url) = 0; + virtual loboolean documentSave (const char *url) = 0; + + virtual ~LibLibreOffice () {}; +}; + +LibLibreOffice *lo_init (const char *install_path); + +#endif +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/inc/liblibreoffice_impl.hxx b/desktop/inc/liblibreoffice_impl.hxx new file mode 100644 index 000000000000..d7686eb1dbdf --- /dev/null +++ b/desktop/inc/liblibreoffice_impl.hxx @@ -0,0 +1,30 @@ +/* -*- 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/. + */ + +#ifndef _LIBLIBREOFFICE_IMPL_HXX +#define _LIBLIBREOFFICE_IMPL_HXX + +#include "liblibreoffice.hxx" + +typedef int loboolean; +typedef struct _LODocument LODocument; + +class LibLibreOffice_Impl : public LibLibreOffice +{ +public: + virtual loboolean initialize (const char *installPath); + + virtual LODocument *documentLoad (const char *url); + virtual loboolean documentSave (const char *url); + + virtual ~LibLibreOffice_Impl (); +}; + +#endif +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 5aab66bd42d2..4b47ac6a498a 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -7,9 +7,10 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <liblibreoffice_impl.hxx> + #include <stdio.h> -#include <liblibreoffice.h> #include <tools/errinf.hxx> #include <osl/file.hxx> #include <rtl/strbuf.hxx> @@ -35,25 +36,14 @@ static uno::Reference<css::uno::XComponentContext> xContext; static uno::Reference<css::lang::XMultiServiceFactory> xSFactory; static uno::Reference<css::lang::XMultiComponentFactory> xFactory; -SAL_DLLPUBLIC_EXPORT void -lo_error_free( LOError * ) -{ -} - -SAL_DLLPUBLIC_EXPORT LOError * -lo_error_new( int, const char * ) +LODocument * +LibLibreOffice_Impl::documentLoad( const char *docUrl ) { return NULL; } -SAL_DLLPUBLIC_EXPORT LODocument * -lo_document_load( const char *, LOError ** ) -{ - return NULL; -} - -SAL_DLLPUBLIC_EXPORT loboolean -lo_document_save( const char *, LOError ** ) +loboolean +LibLibreOffice_Impl::documentSave( const char * ) { return 1; } @@ -92,8 +82,8 @@ initialize_uno( const rtl::OUString &aUserProfileURL ) xSFactory = uno::Reference<lang::XMultiServiceFactory>(xFactory, uno::UNO_QUERY_THROW); } -SAL_DLLPUBLIC_EXPORT loboolean -lo_initialize( const char *app_path ) +loboolean +LibLibreOffice_Impl::initialize( const char *app_path ) { static bool bInitialized = false; if( bInitialized ) @@ -132,7 +122,11 @@ extern "C" { LibLibreOffice *liblibreoffice_hook(void) { - return new LibLibreOffice(); + return new LibLibreOffice_Impl(); +} + +LibLibreOffice_Impl::~LibLibreOffice_Impl () +{ } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/lib/shim.cxx b/desktop/source/lib/shim.cxx index c57803e588fa..4c8e61d93a27 100644 --- a/desktop/source/lib/shim.cxx +++ b/desktop/source/lib/shim.cxx @@ -9,8 +9,12 @@ #ifdef LINUX +#include <stdio.h> +#include <string.h> + +#include <osl/module.h> #include <sal/types.h> -#include <liblibreoffice.h> +#include <liblibreoffice.hxx> #include <dlfcn.h> #ifdef AIX @@ -23,11 +27,11 @@ extern "C" { typedef LibLibreOffice *(HookFunction)(void); }; -extern LibLibreOffice *lo_init( const char *install_path ) +SAL_DLLPUBLIC_EXPORT LibLibreOffice *lo_init( const char *install_path ) { if( !install_path ) return NULL; - char *impl_lib = malloc( strlen (install_path) + sizeof( TARGET_LIB ) + 2 ); + char *imp_lib = (char *) malloc( strlen (install_path) + sizeof( TARGET_LIB ) + 2 ); strcpy( imp_lib, install_path ); strcat( imp_lib, "/" ); strcat( imp_lib, TARGET_LIB ); @@ -39,7 +43,7 @@ extern LibLibreOffice *lo_init( const char *install_path ) } free( imp_lib ); - HookFunction *pSym = dlsym( dlhandle, "liblibreoffice_hook" ); + HookFunction *pSym = (HookFunction *) dlsym( dlhandle, "liblibreoffice_hook" ); if( !pSym ) { fprintf( stderr, "failed to find hook in library '%s'\n", imp_lib ); return NULL; diff --git a/smoketest/libtest.cxx b/smoketest/libtest.cxx index 39ab01bb2cf6..36c3a0c1e070 100644 --- a/smoketest/libtest.cxx +++ b/smoketest/libtest.cxx @@ -8,7 +8,9 @@ */ // yuck / FIXME ... -#include "../desktop/inc/liblibreoffice.h" +#include "../desktop/inc/liblibreoffice.hxx" + +#include <assert.h> #include <sal/types.h> #include <rtl/ustring.hxx> @@ -44,7 +46,7 @@ void Test::test() rtl::Bootstrap::get( rtl::OUString( "arg-soffice" ), aArgSoffice ); OString aInstall = OUStringToOString( aArgSoffice, RTL_TEXTENCODING_UTF8 ); fprintf( stderr, "liblibreoffice test: '%s'\n", aInstall.getStr() ); - lo_initialize( aInstall.getStr() ); + assert (lo_init( aInstall.getStr() )); } CPPUNIT_TEST_SUITE_REGISTRATION(Test); |