diff options
author | Denis Vlasenko | 2007-04-10 21:38:30 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-04-10 21:38:30 +0000 |
commit | 335b63d8d1876ce4e172ebcc9d64544785682244 (patch) | |
tree | 14183fd728ce51ae10baee70f7d8f72c39d30649 /include | |
parent | 07c394e69b0cfa7cd30e97ffc6edb0d857905f45 (diff) | |
download | busybox-335b63d8d1876ce4e172ebcc9d64544785682244.zip busybox-335b63d8d1876ce4e172ebcc9d64544785682244.tar.gz |
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
Diffstat (limited to 'include')
-rw-r--r-- | include/applets.h | 14 | ||||
-rw-r--r-- | include/busybox.h | 26 | ||||
-rw-r--r-- | include/libbb.h | 10 |
3 files changed, 30 insertions, 20 deletions
diff --git a/include/applets.h b/include/applets.h index b59d331..d05299b 100644 --- a/include/applets.h +++ b/include/applets.h @@ -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 diff --git a/include/busybox.h b/include/busybox.h index 6f48087..380de9a 100644 --- a/include/busybox.h +++ b/include/busybox.h @@ -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_ */ diff --git a/include/libbb.h b/include/libbb.h index 3919524..6fff441 100644 --- a/include/libbb.h +++ b/include/libbb.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[]; |