diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-04-10 21:38:30 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-04-10 21:38:30 +0000 |
| commit | 335b63d8d1876ce4e172ebcc9d64544785682244 (patch) | |
| tree | 14183fd728ce51ae10baee70f7d8f72c39d30649 /applets | |
| parent | 07c394e69b0cfa7cd30e97ffc6edb0d857905f45 (diff) | |
| download | busybox-w32-335b63d8d1876ce4e172ebcc9d64544785682244.tar.gz busybox-w32-335b63d8d1876ce4e172ebcc9d64544785682244.tar.bz2 busybox-w32-335b63d8d1876ce4e172ebcc9d64544785682244.zip | |
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 'applets')
| -rw-r--r-- | applets/applets.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/applets/applets.c b/applets/applets.c index 66f2b821d..3441a7886 100644 --- a/applets/applets.c +++ b/applets/applets.c | |||
| @@ -43,13 +43,13 @@ static const char usage_messages[] = | |||
| 43 | #define usage_messages 0 | 43 | #define usage_messages 0 |
| 44 | #endif /* SHOW_USAGE */ | 44 | #endif /* SHOW_USAGE */ |
| 45 | 45 | ||
| 46 | /* Define struct BB_applet applets[] */ | 46 | /* Define struct bb_applet applets[] */ |
| 47 | #include "applets.h" | 47 | #include "applets.h" |
| 48 | /* The -1 arises because of the {0,NULL,0,-1} entry. */ | 48 | /* The -1 arises because of the {0,NULL,0,-1} entry. */ |
| 49 | const unsigned short NUM_APPLETS = sizeof(applets) / sizeof(struct BB_applet) - 1; | 49 | const unsigned short NUM_APPLETS = sizeof(applets) / sizeof(applets[0]) - 1; |
| 50 | 50 | ||
| 51 | 51 | ||
| 52 | const struct BB_applet *current_applet; | 52 | const struct bb_applet *current_applet; |
| 53 | const char *applet_name ATTRIBUTE_EXTERNALLY_VISIBLE; | 53 | const char *applet_name ATTRIBUTE_EXTERNALLY_VISIBLE; |
| 54 | #ifdef BB_NOMMU | 54 | #ifdef BB_NOMMU |
| 55 | bool re_execed; | 55 | bool re_execed; |
| @@ -61,7 +61,7 @@ bool re_execed; | |||
| 61 | 61 | ||
| 62 | /* applets[] is const, so we have to define this "override" structure */ | 62 | /* applets[] is const, so we have to define this "override" structure */ |
| 63 | static struct BB_suid_config { | 63 | static struct BB_suid_config { |
| 64 | const struct BB_applet *m_applet; | 64 | const struct bb_applet *m_applet; |
| 65 | uid_t m_uid; | 65 | uid_t m_uid; |
| 66 | gid_t m_gid; | 66 | gid_t m_gid; |
| 67 | mode_t m_mode; | 67 | mode_t m_mode; |
| @@ -130,7 +130,7 @@ static void parse_config_file(void) | |||
| 130 | { | 130 | { |
| 131 | struct BB_suid_config *sct_head; | 131 | struct BB_suid_config *sct_head; |
| 132 | struct BB_suid_config *sct; | 132 | struct BB_suid_config *sct; |
| 133 | const struct BB_applet *applet; | 133 | const struct bb_applet *applet; |
| 134 | FILE *f; | 134 | FILE *f; |
| 135 | const char *errmsg; | 135 | const char *errmsg; |
| 136 | char *s; | 136 | char *s; |
| @@ -329,7 +329,7 @@ static void parse_config_file(void) | |||
| 329 | 329 | ||
| 330 | 330 | ||
| 331 | #if ENABLE_FEATURE_SUID | 331 | #if ENABLE_FEATURE_SUID |
| 332 | static void check_suid(const struct BB_applet *applet) | 332 | static void check_suid(const struct bb_applet *applet) |
| 333 | { | 333 | { |
| 334 | uid_t ruid = getuid(); /* real [ug]id */ | 334 | uid_t ruid = getuid(); /* real [ug]id */ |
| 335 | uid_t rgid = getgid(); | 335 | uid_t rgid = getgid(); |
| @@ -464,45 +464,42 @@ void bb_show_usage(void) | |||
| 464 | applet_name, usage_string); | 464 | applet_name, usage_string); |
| 465 | } | 465 | } |
| 466 | 466 | ||
| 467 | sleep_and_die(); | 467 | xfunc_die(); |
| 468 | } | 468 | } |
| 469 | 469 | ||
| 470 | 470 | ||
| 471 | static int applet_name_compare(const void *name, const void *vapplet) | 471 | static int applet_name_compare(const void *name, const void *vapplet) |
| 472 | { | 472 | { |
| 473 | const struct BB_applet *applet = vapplet; | 473 | const struct bb_applet *applet = vapplet; |
| 474 | 474 | ||
| 475 | return strcmp(name, applet->name); | 475 | return strcmp(name, applet->name); |
| 476 | } | 476 | } |
| 477 | 477 | ||
| 478 | const struct BB_applet *find_applet_by_name(const char *name) | 478 | const struct bb_applet *find_applet_by_name(const char *name) |
| 479 | { | 479 | { |
| 480 | /* Do a binary search to find the applet entry given the name. */ | 480 | /* Do a binary search to find the applet entry given the name. */ |
| 481 | return bsearch(name, applets, NUM_APPLETS, sizeof(struct BB_applet), | 481 | return bsearch(name, applets, NUM_APPLETS, sizeof(applets[0]), |
| 482 | applet_name_compare); | 482 | applet_name_compare); |
| 483 | } | 483 | } |
| 484 | 484 | ||
| 485 | 485 | ||
| 486 | #if ENABLE_FEATURE_INSTALLER | 486 | #if ENABLE_FEATURE_INSTALLER |
| 487 | /* | ||
| 488 | * directory table | ||
| 489 | * this should be consistent w/ the enum, busybox.h::Location, | ||
| 490 | * or else... | ||
| 491 | */ | ||
| 492 | static const char usr_bin [] = "/usr/bin"; | ||
| 493 | static const char usr_sbin[] = "/usr/sbin"; | ||
| 494 | |||
| 495 | static const char *const install_dir[] = { | ||
| 496 | &usr_bin [8], /* "", equivalent to "/" for concat_path_file() */ | ||
| 497 | &usr_bin [4], /* "/bin" */ | ||
| 498 | &usr_sbin[4], /* "/sbin" */ | ||
| 499 | usr_bin, | ||
| 500 | usr_sbin | ||
| 501 | }; | ||
| 502 | |||
| 503 | /* create (sym)links for each applet */ | 487 | /* create (sym)links for each applet */ |
| 504 | static void install_links(const char *busybox, int use_symbolic_links) | 488 | static void install_links(const char *busybox, int use_symbolic_links) |
| 505 | { | 489 | { |
| 490 | /* directory table | ||
| 491 | * this should be consistent w/ the enum, | ||
| 492 | * busybox.h::bb_install_loc_t, or else... */ | ||
| 493 | static const char usr_bin [] = "/usr/bin"; | ||
| 494 | static const char usr_sbin[] = "/usr/sbin"; | ||
| 495 | static const char *const install_dir[] = { | ||
| 496 | &usr_bin [8], /* "", equivalent to "/" for concat_path_file() */ | ||
| 497 | &usr_bin [4], /* "/bin" */ | ||
| 498 | &usr_sbin[4], /* "/sbin" */ | ||
| 499 | usr_bin, | ||
| 500 | usr_sbin | ||
| 501 | }; | ||
| 502 | |||
| 506 | int (*lf)(const char *, const char *) = link; | 503 | int (*lf)(const char *, const char *) = link; |
| 507 | char *fpc; | 504 | char *fpc; |
| 508 | int i; | 505 | int i; |
| @@ -513,7 +510,7 @@ static void install_links(const char *busybox, int use_symbolic_links) | |||
| 513 | 510 | ||
| 514 | for (i = 0; applets[i].name != NULL; i++) { | 511 | for (i = 0; applets[i].name != NULL; i++) { |
| 515 | fpc = concat_path_file( | 512 | fpc = concat_path_file( |
| 516 | install_dir[applets[i].location], | 513 | install_dir[applets[i].install_loc], |
| 517 | applets[i].name); | 514 | applets[i].name); |
| 518 | rc = lf(busybox, fpc); | 515 | rc = lf(busybox, fpc); |
| 519 | if (rc != 0 && errno != EEXIST) { | 516 | if (rc != 0 && errno != EEXIST) { |
| @@ -557,7 +554,7 @@ static int busybox_main(int argc, char **argv) | |||
| 557 | applet_name = argv[2]; | 554 | applet_name = argv[2]; |
| 558 | run_applet_by_name(applet_name, 2, argv); | 555 | run_applet_by_name(applet_name, 2, argv); |
| 559 | } else { | 556 | } else { |
| 560 | const struct BB_applet *a; | 557 | const struct bb_applet *a; |
| 561 | int col, output_width; | 558 | int col, output_width; |
| 562 | 559 | ||
| 563 | output_width = 80 - sizeof("start-stop-daemon, ") - 8; | 560 | output_width = 80 - sizeof("start-stop-daemon, ") - 8; |
