summaryrefslogtreecommitdiffstats
path: root/src/cc4group.c
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2019-08-19 13:42:48 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2019-08-19 18:56:58 +0200
commit177c2d8c1ed33391711524948fef5313c8624c75 (patch)
tree6bf8d0e17b2f6c2d69d77b611213139adbc74b9d /src/cc4group.c
parent228bce0f6612044a18569919798d7e89e18a29c8 (diff)
downloadcc4group-177c2d8c1ed33391711524948fef5313c8624c75.tar.gz
cc4group-177c2d8c1ed33391711524948fef5313c8624c75.zip
Allow the warning handling callback to be set to a custom callback
Diffstat (limited to 'src/cc4group.c')
-rw-r--r--src/cc4group.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/cc4group.c b/src/cc4group.c
index df8854a..3c921e5 100644
--- a/src/cc4group.c
+++ b/src/cc4group.c
@@ -238,18 +238,20 @@ static char* cc4group_noerrorFormatter(int32_t const code, const char* const met
return strdup("No Error");
}
-// TODO: allow the user to set a warning callback with falling back to fprintf(stderr) by default
-static void cc4group_warn(const CC4Group* const this, const char* const message, ...)
+static void cc4group_printToStderrWarningCallback(const CC4Group* const this, const char* const format, ...)
{
(void)this;
va_list ap;
- va_start(ap, message);
+ va_start(ap, format);
fputs("WARNING: ", stderr);
- vfprintf(stderr, message, ap);
+ vfprintf(stderr, format, ap);
fputs("\n", stderr);
va_end (ap);
}
+static const CC4Group_WarningCallback cc4group_defaultWarningCallback = cc4group_printToStderrWarningCallback;
+static CC4Group_WarningCallback cc4group_warn = cc4group_defaultWarningCallback;
+
#define AddCleanUpJob(func, data) CleanUpJobListPrepend(this->cleanupJobs, (CC4Group_CleanupJob){(CC4Group_CleanupFunc)func, data});
static void memScrambleHeader(uint8_t* const data)
@@ -2185,6 +2187,11 @@ static void cc4group_setTmpMemoryStrategy(const CC4Group_TmpMemoryStrategy strat
cc4group_tmpMemoryStrategy = strategy;
}
+static void cc4group_setWarningCallback(const CC4Group_WarningCallback warningCallback)
+{
+ cc4group_warn = (warningCallback == NULL) ? cc4group_defaultWarningCallback : warningCallback;
+}
+
static const char* cc4group_getErrorMessage(CC4Group* const this)
{
assert(this);
@@ -3244,6 +3251,7 @@ CC4Group_API cc4group = {
},
.setTmpMemoryStrategy = cc4group_setTmpMemoryStrategy,
+ .setWarningCallback = cc4group_setWarningCallback,
.new = cc4group_new,