summaryrefslogtreecommitdiffstats
path: root/src/cppc4group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cppc4group.cpp')
-rw-r--r--src/cppc4group.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cppc4group.cpp b/src/cppc4group.cpp
index bacf1f7..99d5e41 100644
--- a/src/cppc4group.cpp
+++ b/src/cppc4group.cpp
@@ -2,6 +2,8 @@
#include "cc4group.h"
+#include <cstdarg>
+
CppC4Group::Data::Data() : data{nullptr}, size{0}
{
@@ -333,6 +335,36 @@ void CppC4Group::setTmpMemoryStrategy(const TmpMemoryCallback callback)
cc4group.setTmpMemoryStrategy(customTmpMemoryStrategy);
}
+namespace {
+
+ CppC4Group::WarningCallback cppc4group_warningCallback;
+ void CppC4Group_CustomWarningCallback(const CC4Group* const, const char* const format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ int size = std::vsnprintf(nullptr, 0, format, ap) + 1;
+ std::string message;
+ message.resize(size);
+ std::vsnprintf(message.data(), size, format, ap);
+ message.resize(size - 1);
+ va_end (ap);
+ cppc4group_warningCallback(message);
+ }
+}
+
+void CppC4Group::setWarningCallback(const CppC4Group::WarningCallback callback)
+{
+ if(callback == nullptr)
+ {
+ cc4group.setWarningCallback(nullptr);
+ }
+ else
+ {
+ cppc4group_warningCallback = callback;
+ cc4group.setWarningCallback(CppC4Group_CustomWarningCallback);
+ }
+}
+
bool CppC4Group::setMaker(const std::string& maker, const std::string& path, const bool recursive)
{
return cc4group.setMaker(p->g, maker.c_str(), path.c_str(), recursive);