diff --git a/include/sudo_fatal.h b/include/sudo_fatal.h index 14e44b4b8..37ac9defc 100644 --- a/include/sudo_fatal.h +++ b/include/sudo_fatal.h @@ -26,6 +26,8 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#include "sudo_plugin.h" /* for conversation function */ + /* * We wrap fatal/fatalx and warn/warnx so that the same output can * go to the debug file, if there is one. @@ -158,15 +160,12 @@ #endif /* SUDO_ERROR_WRAP */ typedef void (*sudo_fatal_callback_t)(void); - -struct sudo_conv_message; -struct sudo_conv_reply; -struct sudo_conv_callback; +typedef bool (*sudo_warn_setlocale_t)(bool, int *); sudo_dso_public int sudo_fatal_callback_deregister_v1(sudo_fatal_callback_t func); sudo_dso_public int sudo_fatal_callback_register_v1(sudo_fatal_callback_t func); sudo_dso_public char *sudo_warn_gettext_v1(const char *domainname, const char *msgid) __format_arg(2); -sudo_dso_public void sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)); +sudo_dso_public void sudo_warn_set_locale_func_v1(sudo_warn_setlocale_t func); sudo_dso_public void sudo_fatal_nodebug_v1(const char *fmt, ...) __printf0like(1, 2) __attribute__((__noreturn__)); sudo_dso_public void sudo_fatalx_nodebug_v1(const char *fmt, ...) __printflike(1, 2) __attribute__((__noreturn__)); sudo_dso_public void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) __printflike(2, 3) __attribute__((__noreturn__)); @@ -179,7 +178,7 @@ sudo_dso_public void sudo_gai_warn_nodebug_v1(int errnum, const char *fmt, ...) sudo_dso_public void sudo_vwarn_nodebug_v1(const char *fmt, va_list ap) __printf0like(1, 0); sudo_dso_public void sudo_vwarnx_nodebug_v1(const char *fmt, va_list ap) __printflike(1, 0); sudo_dso_public void sudo_gai_vwarn_nodebug_v1(int errnum, const char *fmt, va_list ap) __printflike(2, 0); -sudo_dso_public void sudo_warn_set_conversation_v1(int (*conv)(int num_msgs, const struct sudo_conv_message *msgs, struct sudo_conv_reply *replies, struct sudo_conv_callback *callback)); +sudo_dso_public void sudo_warn_set_conversation_v1(sudo_conv_t conv); #define sudo_fatal_callback_deregister(_a) sudo_fatal_callback_deregister_v1((_a)) #define sudo_fatal_callback_register(_a) sudo_fatal_callback_register_v1((_a)) diff --git a/lib/util/fatal.c b/lib/util/fatal.c index dcccc3e3f..2b9bdd075 100644 --- a/lib/util/fatal.c +++ b/lib/util/fatal.c @@ -54,8 +54,8 @@ SLIST_HEAD(sudo_fatal_callback_list, sudo_fatal_callback); static struct sudo_fatal_callback_list callbacks = SLIST_HEAD_INITIALIZER(&callbacks); static sudo_conv_t sudo_warn_conversation; -static bool (*sudo_warn_setlocale)(bool, int *); -static bool (*sudo_warn_setlocale_prev)(bool, int *); +static sudo_warn_setlocale_t sudo_warn_setlocale; +static sudo_warn_setlocale_t sudo_warn_setlocale_prev; static void warning(const char *errstr, const char *fmt, va_list ap); @@ -310,7 +310,7 @@ sudo_warn_set_conversation_v1(sudo_conv_t conv) * locale for user warnings. */ void -sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)) +sudo_warn_set_locale_func_v1(sudo_warn_setlocale_t func) { sudo_warn_setlocale_prev = sudo_warn_setlocale; sudo_warn_setlocale = func;