+#if defined(__GNUC__) && __GNUC__ == 2
+# define fatal_nodebug(fmt...) do { \
+ warning_set_locale(); \
+ fatal2(fmt); \
+} while (0)
+# define fatalx_nodebug(fmt...) do { \
+ warning_set_locale(); \
+ fatalx2(fmt); \
+} while (0)
+# define warning_nodebug(fmt...) do { \
+ warning_set_locale(); \
+ warning2(fmt); \
+ warning_restore_locale(); \
+} while (0)
+# define warningx_nodebug(fmt...) do { \
+ warning_set_locale(); \
+ warningx2(fmt); \
+ warning_restore_locale(); \
+} while (0)
+#else
+# define fatal_nodebug(...) do { \
+ warning_set_locale(); \
+ fatal2(__VA_ARGS__); \
+} while (0)
+# define fatalx_nodebug(...) do { \
+ warning_set_locale(); \
+ fatalx2(__VA_ARGS__); \
+} while (0)
+# define warning_nodebug(...) do { \
+ warning_set_locale(); \
+ warning2(__VA_ARGS__); \
+ warning_restore_locale(); \
+} while (0)
+# define warningx_nodebug(...) do { \
+ warning_set_locale(); \
+ warningx2(__VA_ARGS__); \
+ warning_restore_locale(); \
+} while (0)
+#endif /* __GNUC__ == 2 */
+#define vfatal_nodebug(fmt, ap) do { \
+ warning_set_locale(); \
+ vfatal2((fmt), (ap)); \
+} while (0)
+#define vfatalx_nodebug(fmt, ap) do { \
+ warning_set_locale(); \
+ vfatalx2((fmt), (ap)); \
+} while (0)
+#define vwarning_nodebug(fmt, ap) do { \
+ warning_set_locale(); \
+ vwarning2((fmt), (ap)); \
+ warning_restore_locale(); \
+} while (0)
+#define vwarningx_nodebug(fmt, ap) do { \
+ warning_set_locale(); \
+ vwarningx2((fmt), (ap)); \
+ warning_restore_locale(); \
+} while (0)
+
+#define fatal_setjmp() (fatal_enable_setjmp(), sigsetjmp(fatal_jmp, 1))
+#define fatal_longjmp(val) siglongjmp(fatal_jmp, val)
+
+extern int (*sudo_printf)(int msg_type, const char *fmt, ...);
+extern sigjmp_buf fatal_jmp;
+
+int fatal_callback_register(void (*func)(void));
+void fatal_disable_setjmp(void);
+void fatal_enable_setjmp(void);
+void fatal2(const char *, ...) __printflike(1, 2) __attribute__((__noreturn__));
+void fatalx2(const char *, ...) __printflike(1, 2) __attribute__((__noreturn__));
+void vfatal2(const char *, va_list ap) __attribute__((__noreturn__));
+void vfatalx2(const char *, va_list ap) __attribute__((__noreturn__));