Define sudo_warn_setlocale_t and use sudo_conv_t in sudo_fatal.h.

Works around a bug in older versions of the HP ANSI C compiler
and results in more readable code.
This commit is contained in:
Todd C. Miller
2020-09-05 08:21:43 -06:00
parent a7033f33a9
commit d56347b981
2 changed files with 8 additions and 9 deletions

View File

@@ -26,6 +26,8 @@
# include "compat/stdbool.h" # include "compat/stdbool.h"
#endif /* HAVE_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 * We wrap fatal/fatalx and warn/warnx so that the same output can
* go to the debug file, if there is one. * go to the debug file, if there is one.
@@ -158,15 +160,12 @@
#endif /* SUDO_ERROR_WRAP */ #endif /* SUDO_ERROR_WRAP */
typedef void (*sudo_fatal_callback_t)(void); typedef void (*sudo_fatal_callback_t)(void);
typedef bool (*sudo_warn_setlocale_t)(bool, int *);
struct sudo_conv_message;
struct sudo_conv_reply;
struct sudo_conv_callback;
sudo_dso_public int sudo_fatal_callback_deregister_v1(sudo_fatal_callback_t func); 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 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 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_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_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__)); 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_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_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_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_deregister(_a) sudo_fatal_callback_deregister_v1((_a))
#define sudo_fatal_callback_register(_a) sudo_fatal_callback_register_v1((_a)) #define sudo_fatal_callback_register(_a) sudo_fatal_callback_register_v1((_a))

View File

@@ -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 struct sudo_fatal_callback_list callbacks = SLIST_HEAD_INITIALIZER(&callbacks);
static sudo_conv_t sudo_warn_conversation; static sudo_conv_t sudo_warn_conversation;
static bool (*sudo_warn_setlocale)(bool, int *); static sudo_warn_setlocale_t sudo_warn_setlocale;
static bool (*sudo_warn_setlocale_prev)(bool, int *); static sudo_warn_setlocale_t sudo_warn_setlocale_prev;
static void warning(const char *errstr, const char *fmt, va_list ap); 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. * locale for user warnings.
*/ */
void 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_prev = sudo_warn_setlocale;
sudo_warn_setlocale = func; sudo_warn_setlocale = func;