summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorJack Leigh <leighman@gmx.se>2013-03-05 16:19:58 +0000
committerMichael Meeks <michael.meeks@suse.com>2013-03-12 15:35:34 +0000
commit07352f07ce40ef40e9b73fd05aa4f9c5eac38290 (patch)
tree9a0ece5e5781f2a2846a0948f50727ed467278a8 /desktop
parent8887de72c184bec6225a952ec90433ae1b7a5b26 (diff)
liblibo: move to C++ interface.
Change-Id: Ie14a9446abd9524604feddf811d5373a26a30cbd
Diffstat (limited to 'desktop')
-rw-r--r--desktop/Library_libreoffice.mk6
-rw-r--r--desktop/inc/liblibreoffice.h38
-rw-r--r--desktop/inc/liblibreoffice.hxx30
-rw-r--r--desktop/inc/liblibreoffice_impl.hxx30
-rw-r--r--desktop/source/lib/init.cxx32
-rw-r--r--desktop/source/lib/shim.cxx12
6 files changed, 87 insertions, 61 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;