summaryrefslogtreecommitdiff
path: root/poppler/Error.cc
diff options
context:
space:
mode:
Diffstat (limited to 'poppler/Error.cc')
-rw-r--r--poppler/Error.cc95
1 files changed, 38 insertions, 57 deletions
diff --git a/poppler/Error.cc b/poppler/Error.cc
index 99ca3ad3..f821bba9 100644
--- a/poppler/Error.cc
+++ b/poppler/Error.cc
@@ -14,10 +14,11 @@
// under GPL version 2 or later
//
// Copyright (C) 2005, 2007 Jeff Muizelaar <jeff@infidigm.net>
-// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org>
+// Copyright (C) 2005, 2018, 2022 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com>
// Copyright (C) 2012 Marek Kasik <mkasik@redhat.com>
-// Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com>
+// Copyright (C) 2013, 2017 Adrian Johnson <ajohnson@redneon.com>
+// Copyright (C) 2020 Adam Reichold <adam.reichold@t-online.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -25,74 +26,54 @@
//========================================================================
#include <config.h>
+#include <poppler-config.h>
-#ifdef USE_GCC_PRAGMAS
-#pragma implementation
-#endif
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdarg.h>
+#include <cstdio>
+#include <cstddef>
+#include <cstdarg>
#include "GooString.h"
#include "GlobalParams.h"
#include "Error.h"
-static const char *errorCategoryNames[] = {
- "Syntax Warning",
- "Syntax Error",
- "Config Error",
- "Command Line Error",
- "I/O Error",
- "Permission Error",
- "Unimplemented Feature",
- "Internal Error"
-};
+static const char *errorCategoryNames[] = { "Syntax Warning", "Syntax Error", "Config Error", "Command Line Error", "I/O Error", "Permission Error", "Unimplemented Feature", "Internal Error" };
-static void (*errorCbk)(void *data, ErrorCategory category,
- Goffset pos, char *msg) = NULL;
-static void *errorCbkData = NULL;
+static ErrorCallback errorCbk = nullptr;
-void setErrorCallback(void (*cbk)(void *data, ErrorCategory category,
- Goffset pos, char *msg),
- void *data) {
- errorCbk = cbk;
- errorCbkData = data;
+void setErrorCallback(ErrorCallback cbk)
+{
+ errorCbk = cbk;
}
-void CDECL error(ErrorCategory category, Goffset pos, const char *msg, ...) {
- va_list args;
- GooString *s, *sanitized;
+void CDECL error(ErrorCategory category, Goffset pos, const char *msg, ...)
+{
+ va_list args;
- // NB: this can be called before the globalParams object is created
- if (!errorCbk && globalParams && globalParams->getErrQuiet()) {
- return;
- }
- va_start(args, msg);
- s = GooString::formatv(msg, args);
- va_end(args);
+ // NB: this can be called before the globalParams object is created
+ if (!errorCbk && globalParams && globalParams->getErrQuiet()) {
+ return;
+ }
+ va_start(args, msg);
+ const std::unique_ptr<GooString> s = GooString::formatv(msg, args);
+ va_end(args);
- sanitized = new GooString ();
- for (int i = 0; i < s->getLength(); ++i) {
- const char c = s->getChar(i);
- if (c < (char)0x20 || c >= (char)0x7f) {
- sanitized->appendf("<{0:02x}>", c & 0xff);
- } else {
- sanitized->append(c);
+ GooString sanitized;
+ for (int i = 0; i < s->getLength(); ++i) {
+ const char c = s->getChar(i);
+ if (c < (char)0x20 || c >= (char)0x7f) {
+ sanitized.appendf("<{0:02x}>", c & 0xff);
+ } else {
+ sanitized.append(c);
+ }
}
- }
- if (errorCbk) {
- (*errorCbk)(errorCbkData, category, pos, sanitized->getCString());
- } else {
- if (pos >= 0) {
- fprintf(stderr, "%s (%lld): %s\n",
- errorCategoryNames[category], (long long)pos, sanitized->getCString());
+ if (errorCbk) {
+ (*errorCbk)(category, pos, sanitized.c_str());
} else {
- fprintf(stderr, "%s: %s\n",
- errorCategoryNames[category], sanitized->getCString());
+ if (pos >= 0) {
+ fprintf(stderr, "%s (%lld): %s\n", errorCategoryNames[category], (long long)pos, sanitized.c_str());
+ } else {
+ fprintf(stderr, "%s: %s\n", errorCategoryNames[category], sanitized.c_str());
+ }
+ fflush(stderr);
}
- fflush(stderr);
- }
- delete s;
- delete sanitized;
}