-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathError.cc
81 lines (71 loc) · 2.67 KB
/
Error.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//========================================================================
//
// Error.cc
//
// Copyright 1996-2003 Glyph & Cog, LLC
//
//========================================================================
//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2005, 2007 Jeff Muizelaar <[email protected]>
// Copyright (C) 2005, 2018, 2022 Albert Astals Cid <[email protected]>
// Copyright (C) 2007 Krzysztof Kowalczyk <[email protected]>
// Copyright (C) 2012 Marek Kasik <[email protected]>
// Copyright (C) 2013, 2017 Adrian Johnson <[email protected]>
// Copyright (C) 2020 Adam Reichold <[email protected]>
// Copyright (C) 2024 Oliver Sander <[email protected]>
// Copyright (C) 2024 Vincent Lefevre <[email protected]>
// Copyright (C) 2024 g10 Code GmbH, Author: Sune Stolborg Vuorela <[email protected]>
//
// 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
//
//========================================================================
#include <config.h>
#include <poppler-config.h>
#include <cstdio>
#include <cstddef>
#include <cstdarg>
#include "goo/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 ErrorCallback errorCbk = nullptr;
void setErrorCallback(ErrorCallback cbk)
{
errorCbk = cbk;
}
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);
const std::string s = GooString::formatv(msg, args);
va_end(args);
GooString sanitized;
for (const char c : s) {
if (c < (char)0x20 || c >= (char)0x7f) {
sanitized.appendf("<{0:02x}>", c & 0xff);
} else {
sanitized.append(c);
}
}
if (errorCbk) {
(*errorCbk)(category, pos, sanitized.c_str());
} else {
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);
}
}