aboutsummaryrefslogtreecommitdiff
path: root/include/libbb.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libbb.h')
-rw-r--r--include/libbb.h45
1 files changed, 44 insertions, 1 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 021100db1..111d1b790 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1137,7 +1137,7 @@ void exec_prog_or_SHELL(char **argv) NORETURN FAST_FUNC;
1137({ \ 1137({ \
1138 pid_t bb__xvfork_pid = vfork(); \ 1138 pid_t bb__xvfork_pid = vfork(); \
1139 if (bb__xvfork_pid < 0) \ 1139 if (bb__xvfork_pid < 0) \
1140 bb_perror_msg_and_die("vfork"); \ 1140 bb_simple_perror_msg_and_die("vfork"); \
1141 bb__xvfork_pid; \ 1141 bb__xvfork_pid; \
1142}) 1142})
1143#if BB_MMU 1143#if BB_MMU
@@ -1324,13 +1324,17 @@ extern void (*die_func)(void);
1324void xfunc_die(void) NORETURN FAST_FUNC; 1324void xfunc_die(void) NORETURN FAST_FUNC;
1325void bb_show_usage(void) NORETURN FAST_FUNC; 1325void bb_show_usage(void) NORETURN FAST_FUNC;
1326void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1326void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC;
1327void bb_simple_error_msg(const char *s) FAST_FUNC;
1327void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; 1328void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC;
1329void bb_simple_error_msg_and_die(const char *s) NORETURN FAST_FUNC;
1328void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1330void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC;
1329void bb_simple_perror_msg(const char *s) FAST_FUNC; 1331void bb_simple_perror_msg(const char *s) FAST_FUNC;
1330void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; 1332void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC;
1331void bb_simple_perror_msg_and_die(const char *s) NORETURN FAST_FUNC; 1333void bb_simple_perror_msg_and_die(const char *s) NORETURN FAST_FUNC;
1332void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1334void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC;
1335void bb_simple_herror_msg(const char *s) FAST_FUNC;
1333void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; 1336void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC;
1337void bb_simple_herror_msg_and_die(const char *s) NORETURN FAST_FUNC;
1334void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC; 1338void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC;
1335void bb_perror_nomsg(void) FAST_FUNC; 1339void bb_perror_nomsg(void) FAST_FUNC;
1336void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; 1340void 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;
1339 1343
1340#if ENABLE_FEATURE_SYSLOG_INFO 1344#if ENABLE_FEATURE_SYSLOG_INFO
1341void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1345void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC;
1346void bb_simple_info_msg(const char *s) FAST_FUNC;
1342void bb_vinfo_msg(const char *s, va_list p) FAST_FUNC; 1347void bb_vinfo_msg(const char *s, va_list p) FAST_FUNC;
1343#else 1348#else
1344#define bb_info_msg bb_error_msg 1349#define bb_info_msg bb_error_msg
1350#define bb_simple_info_msg bb_simple_error_msg
1345#define bb_vinfo_msg(s,p) bb_verror_msg(s,p,NULL) 1351#define bb_vinfo_msg(s,p) bb_verror_msg(s,p,NULL)
1346#endif 1352#endif
1347 1353
1354#if ENABLE_WARN_SIMPLE_MSG
1355/* If enabled, cause calls to bb_error_msg() et al that only take a single
1356 * parameter to generate a warning.
1357 */
1358static inline void __attribute__ ((deprecated("use bb_simple_error_msg instead")))
1359 bb_not_simple_error_msg(const char *s) { bb_simple_error_msg(s); }
1360static inline void __attribute__ ((deprecated("use bb_simple_error_msg_and_die instead"))) NORETURN
1361 bb_not_simple_error_msg_and_die(const char *s) { bb_simple_error_msg_and_die(s); }
1362static inline void __attribute__ ((deprecated("use bb_simple_perror_msg instead")))
1363 bb_not_simple_perror_msg(const char *s) { bb_simple_perror_msg(s); }
1364static inline void __attribute__ ((deprecated("use bb_simple_perror_msg_and_die instead"))) NORETURN
1365 bb_not_simple_perror_msg_and_die(const char *s) { bb_simple_perror_msg_and_die(s); }
1366static inline void __attribute__ ((deprecated("use bb_simple_herror_msg instead")))
1367 bb_not_simple_herror_msg(const char *s) { bb_simple_herror_msg(s); }
1368static inline void __attribute__ ((deprecated("use bb_simple_herror_msg_and_die instead"))) NORETURN
1369 bb_not_simple_herror_msg_and_die(const char *s) { bb_simple_herror_msg_and_die(s); }
1370static inline void __attribute__ ((deprecated("use bb_simple_info_msg instead")))
1371 bb_not_simple_info_msg(const char *s) { bb_simple_info_msg(s); }
1372/* Override bb_error_msg() and related functions with macros that will
1373 * substitute them for the equivalent bb_not_simple_error_msg() function when
1374 * they are used with only a single parameter. Macro approach inspired by
1375 * https://gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments and
1376 * https://gustedt.wordpress.com/2010/06/03/default-arguments-for-c99
1377 */
1378#define _ARG18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) _17
1379#define BB_MSG_KIND(...) _ARG18(__VA_ARGS__, , , , , , , , , , , , , , , , , _not_simple)
1380#define _BB_MSG(name, kind, ...) bb##kind##name(__VA_ARGS__)
1381#define BB_MSG(name, kind, ...) _BB_MSG(name, kind, __VA_ARGS__)
1382#define bb_error_msg(...) BB_MSG(_error_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1383#define bb_error_msg_and_die(...) BB_MSG(_error_msg_and_die, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1384#define bb_perror_msg(...) BB_MSG(_perror_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1385#define bb_perror_msg_and_die(...) BB_MSG(_perror_msg_and_die, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1386#define bb_herror_msg(...) BB_MSG(_herror_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1387#define bb_herror_msg_and_die(...) BB_MSG(_herror_msg_and_die, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1388#define bb_info_msg(...) BB_MSG(_info_msg, BB_MSG_KIND(__VA_ARGS__), __VA_ARGS__)
1389#endif
1390
1348/* We need to export XXX_main from libbusybox 1391/* We need to export XXX_main from libbusybox
1349 * only if we build "individual" binaries 1392 * only if we build "individual" binaries
1350 */ 1393 */