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:
@@ -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))
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user