Browse Source

[Minor] Improve diagnostics

tags/3.7.2
Vsevolod Stakhov 7 months ago
parent
commit
6b81b812a7
No account linked to committer's email address
1 changed files with 15 additions and 7 deletions
  1. 15
    7
      src/client/rspamc.cxx

+ 15
- 7
src/client/rspamc.cxx View File

@@ -365,28 +365,36 @@ struct fmt::formatter<rspamd_action_type> : fmt::formatter<string_view> {
template<typename... T>
static inline void rspamc_print(std::FILE *f, fmt::format_string<T...> fmt, T &&...args)
{
static auto try_print_exception = 1;
static auto try_print_exception = true;
auto wanna_die = false;

try {
fmt::print(f, fmt, std::forward<T>(args)...);
} catch (const fmt::format_error &err) {
if (try_print_exception) {
if (fprintf(f, "Format error: %s\n", err.what()) < 0) {
try_print_exception = 0;
if (fprintf(stderr, "Format error: %s\n", err.what()) < 0) {
try_print_exception = false;
}
}
} catch (std::system_error &err) {
wanna_die = true;
if (try_print_exception) {
if (fprintf(f, "System error: %s\n", err.what()) < 0) {
try_print_exception = 0;
if (fprintf(stderr, "System error: %s\n", err.what()) < 0) {
try_print_exception = false;
}
}
} catch (...) {
wanna_die = true;
if (try_print_exception) {
if (fprintf(f, "Unknown format error\n") < 0) {
try_print_exception = 0;
if (fprintf(stderr, "Unknown format error\n") < 0) {
try_print_exception = false;
}
}
}

if (wanna_die) {
exit(EXIT_FAILURE);
}
}

using sort_lambda = std::function<int(const ucl_object_t *, const ucl_object_t *)>;

Loading…
Cancel
Save