make a few struct bb_applet members conditional
rename sllep_and_die -> xfunc_die make fflush_stdout_and_exit NOFORK-safe fix some buglets found by randomconfig
This commit is contained in:
@@ -52,12 +52,12 @@ s - suid type:
|
||||
# define APPLET_NOFORK(name,main,l,s,name2) LINK l name
|
||||
|
||||
#else
|
||||
const struct BB_applet applets[] = { /* name,main,location,need_suid */
|
||||
# define APPLET(name,l,s) {#name,name##_main,l,s},
|
||||
# define APPLET_NOUSAGE(name,main,l,s) {#name,main##_main,l,s},
|
||||
# define APPLET_ODDNAME(name,main,l,s,name2) {#name,main##_main,l,s},
|
||||
# define APPLET_NOEXEC(name,main,l,s,name2) {#name,main##_main,l,s,1},
|
||||
# define APPLET_NOFORK(name,main,l,s,name2) {#name,main##_main,l,s,1,1},
|
||||
const struct bb_applet applets[] = { /* name, main, location, need_suid */
|
||||
# define APPLET(name,l,s) { #name, name##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) },
|
||||
# define APPLET_NOUSAGE(name,main,l,s) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) },
|
||||
# define APPLET_ODDNAME(name,main,l,s,name2) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) },
|
||||
# define APPLET_NOEXEC(name,main,l,s,name2) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) USE_FEATURE_EXEC_PREFER_APPLETS(,1) },
|
||||
# define APPLET_NOFORK(name,main,l,s,name2) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) USE_FEATURE_EXEC_PREFER_APPLETS(,1 ,1) },
|
||||
#endif
|
||||
|
||||
#if ENABLE_INSTALL_NO_USR
|
||||
@@ -355,7 +355,7 @@ USE_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_NEVER, zcat))
|
||||
USE_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_NEVER))
|
||||
|
||||
#if !defined(PROTOTYPES) && !defined(MAKE_USAGE)
|
||||
{ 0, NULL, 0, 0 }
|
||||
{ NULL }
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -9,26 +9,35 @@
|
||||
|
||||
#include "libbb.h"
|
||||
|
||||
#if ENABLE_FEATURE_INSTALLER
|
||||
/* order matters: used as index into "install_dir[]" in busybox.c */
|
||||
enum Location {
|
||||
typedef enum bb_install_loc_t {
|
||||
_BB_DIR_ROOT = 0,
|
||||
_BB_DIR_BIN,
|
||||
_BB_DIR_SBIN,
|
||||
_BB_DIR_USR_BIN,
|
||||
_BB_DIR_USR_SBIN
|
||||
};
|
||||
} bb_install_loc_t;
|
||||
#endif
|
||||
|
||||
enum SUIDRoot {
|
||||
#if ENABLE_FEATURE_SUID
|
||||
typedef enum bb_suid_t {
|
||||
_BB_SUID_NEVER = 0,
|
||||
_BB_SUID_MAYBE,
|
||||
_BB_SUID_ALWAYS
|
||||
};
|
||||
} bb_suid_t;
|
||||
#endif
|
||||
|
||||
struct BB_applet {
|
||||
struct bb_applet {
|
||||
const char *name;
|
||||
int (*main) (int argc, char **argv);
|
||||
__extension__ enum Location location:8;
|
||||
__extension__ enum SUIDRoot need_suid:8;
|
||||
#if ENABLE_FEATURE_INSTALLER
|
||||
__extension__ enum bb_install_loc_t install_loc:8;
|
||||
#endif
|
||||
#if ENABLE_FEATURE_SUID
|
||||
__extension__ enum bb_suid_t need_suid:8;
|
||||
#endif
|
||||
#if ENABLE_FEATURE_EXEC_PREFER_APPLETS
|
||||
/* true if instead if fork(); exec("applet"); waitpid();
|
||||
* one can do fork(); exit(applet_main(argc,argv)); waitpid(); */
|
||||
unsigned char noexec;
|
||||
@@ -36,10 +45,11 @@ struct BB_applet {
|
||||
/* true if instead if fork(); exec("applet"); waitpid();
|
||||
* one can simply call applet_main(argc,argv); */
|
||||
unsigned char nofork;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Defined in applet.c */
|
||||
extern const struct BB_applet applets[];
|
||||
extern const struct bb_applet applets[];
|
||||
extern const unsigned short NUM_APPLETS;
|
||||
|
||||
#endif /* _BB_INTERNAL_H_ */
|
||||
|
||||
@@ -608,7 +608,7 @@ llist_t *llist_rev(llist_t *list);
|
||||
int write_pidfile(const char *path);
|
||||
#define remove_pidfile(f) ((void)unlink(f))
|
||||
#else
|
||||
#define write_pidfile(f) 1
|
||||
#define write_pidfile(f) TRUE
|
||||
#define remove_pidfile(f) ((void)0)
|
||||
#endif
|
||||
|
||||
@@ -623,7 +623,7 @@ extern smallint logmode;
|
||||
extern int die_sleep;
|
||||
extern int xfunc_error_retval;
|
||||
extern jmp_buf die_jmp;
|
||||
extern void sleep_and_die(void) ATTRIBUTE_NORETURN;
|
||||
extern void xfunc_die(void) ATTRIBUTE_NORETURN;
|
||||
extern void bb_show_usage(void) ATTRIBUTE_NORETURN ATTRIBUTE_EXTERNALLY_VISIBLE;
|
||||
extern void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
extern void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
||||
@@ -670,8 +670,8 @@ const struct hwtype *get_hwntype(int type);
|
||||
|
||||
|
||||
#ifndef BUILD_INDIVIDUAL
|
||||
struct BB_applet;
|
||||
extern const struct BB_applet *find_applet_by_name(const char *name);
|
||||
struct bb_applet;
|
||||
extern const struct bb_applet *find_applet_by_name(const char *name);
|
||||
/* Returns only if applet is not found. */
|
||||
extern void run_applet_by_name(const char *name, int argc, char **argv);
|
||||
extern void run_current_applet_and_exit(int argc, char **argv) ATTRIBUTE_NORETURN;
|
||||
@@ -880,7 +880,7 @@ enum { /* DO NOT CHANGE THESE VALUES! cp.c, mv.c, install.c depend on them. */
|
||||
};
|
||||
|
||||
#define FILEUTILS_CP_OPTSTR "pdRfils" USE_SELINUX("c")
|
||||
extern const struct BB_applet *current_applet;
|
||||
extern const struct bb_applet *current_applet;
|
||||
extern const char *applet_name;
|
||||
extern const char BB_BANNER[];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user