diff options
Diffstat (limited to 'include/libbb.h')
-rw-r--r-- | include/libbb.h | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/include/libbb.h b/include/libbb.h index 021100d..111d1b7 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1137,7 +1137,7 @@ void exec_prog_or_SHELL(char **argv) NORETURN FAST_FUNC; ({ \ pid_t bb__xvfork_pid = vfork(); \ if (bb__xvfork_pid < 0) \ - bb_perror_msg_and_die("vfork"); \ + bb_simple_perror_msg_and_die("vfork"); \ bb__xvfork_pid; \ }) #if BB_MMU @@ -1324,13 +1324,17 @@ extern void (*die_func)(void); void xfunc_die(void) NORETURN FAST_FUNC; void bb_show_usage(void) NORETURN FAST_FUNC; void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; +void bb_simple_error_msg(const char *s) FAST_FUNC; void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; +void bb_simple_error_msg_and_die(const char *s) NORETURN FAST_FUNC; void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; void bb_simple_perror_msg(const char *s) FAST_FUNC; void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; void bb_simple_perror_msg_and_die(const char *s) NORETURN FAST_FUNC; void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; +void bb_simple_herror_msg(const char *s) FAST_FUNC; void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; +void bb_simple_herror_msg_and_die(const char *s) NORETURN FAST_FUNC; void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC; void bb_perror_nomsg(void) FAST_FUNC; void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; @@ -1339,12 +1343,51 @@ void bb_logenv_override(void) FAST_FUNC; #if ENABLE_FEATURE_SYSLOG_INFO void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; +void bb_simple_info_msg(const char *s) FAST_FUNC; void bb_vinfo_msg(const char *s, va_list p) FAST_FUNC; #else #define bb_info_msg bb_error_msg +#define bb_simple_info_msg bb_simple_error_msg #define bb_vinfo_msg(s,p) bb_verror_msg(s,p,NULL) #endif +#if ENABLE_WARN_SIMPLE_MSG +/* If enabled, cause calls to bb_error_msg() et al that only take a single + * parameter to generate a warning. + */ +static inline void __attribute__ ((deprecated("use bb_simple_error_msg instead"))) + bb_not_simple_error_msg(const char *s) { bb_simple_error_msg(s); } +static inline void __attribute__ ((deprecated("use bb_simple_error_msg_and_die instead"))) NORETURN + bb_not_simple_error_msg_and_die(const char *s) { bb_simple_error_msg_and_die(s); } +static inline void __attribute__ ((deprecated("use bb_simple_perror_msg instead"))) + bb_not_simple_perror_msg(const char *s) { bb_simple_perror_msg(s); } +static inline void __attribute__ ((deprecated("use bb_simple_perror_msg_and_die instead"))) NORETURN + bb_not_simple_perror_msg_and_die(const char *s) { bb_simple_perror_msg_and_die(s); } +static inline void __attribute__ ((deprecated("use bb_simple_herror_msg instead"))) + bb_not_simple_herror_msg(const char *s) { bb_simple_herror_msg(s); } +static inline void __attribute__ ((deprecated("use bb_simple_herror_msg_and_die instead"))) NORETURN + bb_not_simple_herror_msg_and_die(const char *s) { bb_simple_herror_msg_and_die(s); } +static inline void __attribute__ ((deprecated("use bb_simple_info_msg instead"))) + bb_not_simple_info_msg(const char *s) { bb_simple_info_msg(s); } +/* Override bb_error_msg() and related functions with macros that will + * substitute them for the equivalent bb_not_simple_error_msg() function when + * they are used with only a single parameter. Macro approach inspired by + * https://gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments and + * https://gustedt.wordpress.com/2010/06/03/default-arguments-for-c99 + */ +#define _ARG18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) _17 +#define BB_MSG_KIND(...) _ARG18(__VA_ARGS__, , , , , , , , , , , , , , , , , _not_simple) +#define _BB_MSG(name, kind, ...) bb##kind##name(__VA_ARGS__) +#define BB_MSG(name, kind, ...) _BB_MSG(name, kind, __VA_ARGS__) +#define bb_error_msg(...) BB_MSG(_error_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#define bb_error_msg_and_die(...) BB_MSG(_error_msg_and_die, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#define bb_perror_msg(...) BB_MSG(_perror_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#define bb_perror_msg_and_die(...) BB_MSG(_perror_msg_and_die, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#define bb_herror_msg(...) BB_MSG(_herror_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#define bb_herror_msg_and_die(...) BB_MSG(_herror_msg_and_die, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#define bb_info_msg(...) BB_MSG(_info_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__) +#endif + /* We need to export XXX_main from libbusybox * only if we build "individual" binaries */ |