]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Improve diagnostics
authorVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 24 Oct 2023 15:02:59 +0000 (16:02 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 24 Oct 2023 15:02:59 +0000 (16:02 +0100)
src/client/rspamc.cxx

index cf2f9d1dc37ac38b2dc0b9ea33abf9e7f63a4328..50e3cbdee439b2afcbc96ccf797e1d75609b376a 100644 (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 *)>;