From 66f1fd2ad9f2a4e3172bd07f6d71bb1321b0dce0 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Thu, 8 Sep 2022 17:34:22 -0400 Subject: [PATCH] Switch user-supplied functions in C API to return int --- examples/qpdfjob-c-save-attachment.c | 4 ++-- include/qpdf/qpdflogger-c.h | 3 ++- libqpdf/qpdflogger-c.cc | 7 +------ libtests/logger_c.c | 4 ++-- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/examples/qpdfjob-c-save-attachment.c b/examples/qpdfjob-c-save-attachment.c index 6f67e25..39d1f69 100644 --- a/examples/qpdfjob-c-save-attachment.c +++ b/examples/qpdfjob-c-save-attachment.c @@ -12,11 +12,11 @@ // something with QPDFJob. See qpdfjob-c-save-attachment.c for an // implementation that uses the C API. -static void +static int save_to_file(char const* data, size_t len, void* udata) { FILE* f = (FILE*)udata; - fwrite(data, 1, len, f); + return fwrite(data, 1, len, f) != len; } static FILE* diff --git a/include/qpdf/qpdflogger-c.h b/include/qpdf/qpdflogger-c.h index 10ab5bb..6bf456e 100644 --- a/include/qpdf/qpdflogger-c.h +++ b/include/qpdf/qpdflogger-c.h @@ -59,7 +59,8 @@ extern "C" { qpdf_log_dest_custom = 4, }; - typedef void (*qpdf_log_fn_t)(char const* data, size_t len, void* udata); + /* Function should return 0 on success. */ + typedef int (*qpdf_log_fn_t)(char const* data, size_t len, void* udata); QPDF_DLL void qpdflogger_set_info( diff --git a/libqpdf/qpdflogger-c.cc b/libqpdf/qpdflogger-c.cc index 4640c83..290b266 100644 --- a/libqpdf/qpdflogger-c.cc +++ b/libqpdf/qpdflogger-c.cc @@ -56,12 +56,7 @@ set_log_dest( method(l->discard()); break; case qpdf_log_dest_custom: - method(std::make_shared( - identifier, - nullptr, - [fn, udata](unsigned char const* data, size_t len) { - fn(reinterpret_cast(data), len, udata); - })); + method(std::make_shared(identifier, nullptr, fn, udata)); break; } } diff --git a/libtests/logger_c.c b/libtests/logger_c.c index 9481560..5c4c519 100644 --- a/libtests/logger_c.c +++ b/libtests/logger_c.c @@ -8,11 +8,11 @@ #include #include -static void +static int fn(char const* data, size_t len, void* udata) { FILE* f = (FILE*)udata; - fwrite(data, 1, len, f); + return fwrite(data, 1, len, f) != len; } static void -- libgit2 0.21.4