[poppler] cpp/poppler-document.cpp cpp/poppler-document-private.h cpp/poppler-global.cpp cpp/poppler-global.h
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Dec 25 22:26:28 UTC 2018
cpp/poppler-document-private.h | 3 +++
cpp/poppler-document.cpp | 15 ++++++++++++++-
cpp/poppler-global.cpp | 17 +++++++++++++++++
cpp/poppler-global.h | 2 ++
4 files changed, 36 insertions(+), 1 deletion(-)
New commits:
commit 5cba64142f716f5df61c2136175b86e6d7256526
Author: Adam Reichold <adam.reichold at t-online.de>
Date: Mon Dec 24 23:20:45 2018 +0100
Add API to cpp frontend to specify a custom data directory for initialization of global parameters.
diff --git a/cpp/poppler-document-private.h b/cpp/poppler-document-private.h
index 661c9774..fbf330e8 100644
--- a/cpp/poppler-document-private.h
+++ b/cpp/poppler-document-private.h
@@ -44,9 +44,12 @@ public:
initer(const initer &) = delete;
initer& operator=(const initer &) = delete;
+ static bool set_data_dir(const std::string &new_data_dir);
+
private:
static std::mutex mutex;
static unsigned int count;
+ static std::string data_dir;
};
class document_private : private initer
diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
index 6895ecb1..4ce4f780 100644
--- a/cpp/poppler-document.cpp
+++ b/cpp/poppler-document.cpp
@@ -44,13 +44,14 @@ using namespace poppler;
std::mutex poppler::initer::mutex;
unsigned int poppler::initer::count = 0U;
+std::string poppler::initer::data_dir;
initer::initer()
{
std::lock_guard<std::mutex> lock{mutex};
if (!count) {
- globalParams = new GlobalParams();
+ globalParams = new GlobalParams(!data_dir.empty() ? data_dir.c_str() : nullptr);
setErrorCallback(detail::error_function, nullptr);
}
count++;
@@ -69,6 +70,18 @@ initer::~initer()
}
}
+bool initer::set_data_dir(const std::string &new_data_dir)
+{
+ std::lock_guard<std::mutex> lock{mutex};
+
+ if (count == 0) {
+ data_dir = new_data_dir;
+ return true;
+ }
+
+ return false;
+}
+
document_private::document_private(GooString *file_path, const std::string &owner_password,
const std::string &user_password)
diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
index 4468d447..67a58d3f 100644
--- a/cpp/poppler-global.cpp
+++ b/cpp/poppler-global.cpp
@@ -25,6 +25,7 @@
#include "poppler-global.h"
#include "poppler-private.h"
+#include "poppler-document-private.h"
#include "DateInfo.h"
@@ -357,6 +358,22 @@ std::ostream& poppler::operator<<(std::ostream& stream, const byte_array &array)
}
/**
+ * Sets a custom data directory for initialization of global parameters
+ *
+ * If no instances of \see document currently exist, this will save the
+ * given path as a custom data directory to be used when the first instance
+ * of the \see document is constructed.
+ *
+ * \returns true on success, false on failure
+ *
+ * \since 0.73.0
+ */
+bool poppler::set_data_dir(const std::string &new_data_dir)
+{
+ return initer::set_data_dir(new_data_dir);
+}
+
+/**
\typedef poppler::debug_func
Debug/error function.
diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
index eb7ec244..3902d359 100644
--- a/cpp/poppler-global.h
+++ b/cpp/poppler-global.h
@@ -107,6 +107,8 @@ POPPLER_CPP_EXPORT time_type convert_date(const std::string &date);
POPPLER_CPP_EXPORT std::ostream& operator<<(std::ostream& stream, const byte_array &array);
+POPPLER_CPP_EXPORT bool set_data_dir(const std::string &new_data_dir);
+
typedef void(*debug_func)(const std::string &, void *);
POPPLER_CPP_EXPORT void set_debug_error_function(debug_func debug_function, void *closure);
More information about the poppler
mailing list