summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/LibreOfficeKit/LibreOfficeKit.h9
-rw-r--r--include/LibreOfficeKit/LibreOfficeKit.hxx3
-rw-r--r--smoketest/libtest.cxx10
3 files changed, 21 insertions, 1 deletions
diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h
index 97acbab80821..657c16c37db6 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/include/LibreOfficeKit/LibreOfficeKit.h
@@ -18,6 +18,13 @@ extern "C"
typedef struct _LibreOfficeKit LibreOfficeKit;
typedef struct _LibreOfficeKitDocument LibreOfficeKitDocument;
+// Do we have an extended member in this struct ?
+#define LIBREOFFICEKIT_HAS_MEMBER(strct,member,nSize) \
+ ((((int)((unsigned char *)&((strct *) 0)->member) + \
+ (int)sizeof ((strct *) 0)->member)) <= (nSize))
+
+#define LIBREOFFICEKIT_HAS(pKit,member) LIBREOFFICEKIT_HAS_MEMBER(LibreOfficeKit,member,(pKit)->nSize)
+
struct _LibreOfficeKit
{
int nSize;
@@ -28,6 +35,8 @@ struct _LibreOfficeKit
char* (*getError) (LibreOfficeKit *pThis);
};
+#define LIBREOFFICEKIT_DOCUMENT_HAS(pDoc,member) LIBREOFFICEKIT_HAS_MEMBER(LibreOfficeKitDocument,member,(pDoc)->nSize)
+
struct _LibreOfficeKitDocument
{
int nSize;
diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx
index 956e3cba6208..ec1131312280 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -45,11 +45,12 @@ public:
inline bool saveAsWithOptions(const char* pUrl, const char* pFormat = NULL, const char* pFilterOptions = NULL)
{
// available since LibreOffice 4.3
- if (!mpDoc->saveAsWithOptions)
+ if (!LIBREOFFICEKIT_DOCUMENT_HAS(mpDoc, saveAsWithOptions))
return false;
return mpDoc->saveAsWithOptions(mpDoc, pUrl, pFormat, pFilterOptions);
}
+ inline LibreOfficeKitDocument *get() { return mpDoc; }
};
class Office
diff --git a/smoketest/libtest.cxx b/smoketest/libtest.cxx
index 07a13ec10edd..2316b8c24184 100644
--- a/smoketest/libtest.cxx
+++ b/smoketest/libtest.cxx
@@ -75,6 +75,16 @@ int main (int argc, char **argv)
return -1;
}
+ if (!LIBREOFFICEKIT_DOCUMENT_HAS(pDocument->get(), saveAsWithOptions))
+ {
+ fprintf( stderr, "using obsolete LibreOffice %d + %d vs. %d\n",
+ (int)((unsigned char *)&((LibreOfficeKitDocument *) 0)->saveAsWithOptions),
+ (int)sizeof ((LibreOfficeKitDocument *) 0)->saveAsWithOptions,
+ pDocument->get()->nSize );
+ return -1;
+ }
+
+
end = getTimeMS();
fprintf( stderr, "load time: %ld ms\n", (end-start) );
start = end;