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 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); | |||
1324 | void xfunc_die(void) NORETURN FAST_FUNC; | 1324 | void xfunc_die(void) NORETURN FAST_FUNC; |
1325 | void bb_show_usage(void) NORETURN FAST_FUNC; | 1325 | void bb_show_usage(void) NORETURN FAST_FUNC; |
1326 | void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; | 1326 | void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; |
1327 | void bb_simple_error_msg(const char *s) FAST_FUNC; | ||
1327 | void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; | 1328 | void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; |
1329 | void bb_simple_error_msg_and_die(const char *s) NORETURN FAST_FUNC; | ||
1328 | void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; | 1330 | void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; |
1329 | void bb_simple_perror_msg(const char *s) FAST_FUNC; | 1331 | void bb_simple_perror_msg(const char *s) FAST_FUNC; |
1330 | void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; | 1332 | void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; |
1331 | void bb_simple_perror_msg_and_die(const char *s) NORETURN FAST_FUNC; | 1333 | void bb_simple_perror_msg_and_die(const char *s) NORETURN FAST_FUNC; |
1332 | void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; | 1334 | void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; |
1335 | void bb_simple_herror_msg(const char *s) FAST_FUNC; | ||
1333 | void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; | 1336 | void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; |
1337 | void bb_simple_herror_msg_and_die(const char *s) NORETURN FAST_FUNC; | ||
1334 | void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC; | 1338 | void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC; |
1335 | void bb_perror_nomsg(void) FAST_FUNC; | 1339 | void bb_perror_nomsg(void) FAST_FUNC; |
1336 | void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; | 1340 | 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; | |||
1339 | 1343 | ||
1340 | #if ENABLE_FEATURE_SYSLOG_INFO | 1344 | #if ENABLE_FEATURE_SYSLOG_INFO |
1341 | void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; | 1345 | void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; |
1346 | void bb_simple_info_msg(const char *s) FAST_FUNC; | ||
1342 | void bb_vinfo_msg(const char *s, va_list p) FAST_FUNC; | 1347 | void 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 | */ | ||
1358 | static inline void __attribute__ ((deprecated("use bb_simple_error_msg instead"))) | ||
1359 | bb_not_simple_error_msg(const char *s) { bb_simple_error_msg(s); } | ||
1360 | static 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); } | ||
1362 | static inline void __attribute__ ((deprecated("use bb_simple_perror_msg instead"))) | ||
1363 | bb_not_simple_perror_msg(const char *s) { bb_simple_perror_msg(s); } | ||
1364 | static 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); } | ||
1366 | static inline void __attribute__ ((deprecated("use bb_simple_herror_msg instead"))) | ||
1367 | bb_not_simple_herror_msg(const char *s) { bb_simple_herror_msg(s); } | ||
1368 | static 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); } | ||
1370 | static 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 | */ |