random tiny size savings
This commit is contained in:
parent
7cea262273
commit
0ee3999d13
@ -44,7 +44,7 @@ static const char usage_messages[] =
|
|||||||
static struct BB_applet *applet_using;
|
static struct BB_applet *applet_using;
|
||||||
|
|
||||||
/* The -1 arises because of the {0,NULL,0,-1} entry above. */
|
/* The -1 arises because of the {0,NULL,0,-1} entry above. */
|
||||||
const size_t NUM_APPLETS = (sizeof (applets) / sizeof (struct BB_applet) - 1);
|
const unsigned short NUM_APPLETS = (sizeof (applets) / sizeof (struct BB_applet) - 1);
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_SUID_CONFIG
|
#ifdef CONFIG_FEATURE_SUID_CONFIG
|
||||||
@ -459,8 +459,6 @@ static int applet_name_compare(const void *name, const void *vapplet)
|
|||||||
return strcmp(name, applet->name);
|
return strcmp(name, applet->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern const size_t NUM_APPLETS;
|
|
||||||
|
|
||||||
struct BB_applet *find_applet_by_name(const char *name)
|
struct BB_applet *find_applet_by_name(const char *name)
|
||||||
{
|
{
|
||||||
return bsearch(name, applets, NUM_APPLETS, sizeof(struct BB_applet),
|
return bsearch(name, applets, NUM_APPLETS, sizeof(struct BB_applet),
|
||||||
@ -469,15 +467,19 @@ struct BB_applet *find_applet_by_name(const char *name)
|
|||||||
|
|
||||||
void run_applet_by_name(const char *name, int argc, char **argv)
|
void run_applet_by_name(const char *name, int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (ENABLE_FEATURE_SUID_CONFIG) parse_config_file();
|
if (ENABLE_FEATURE_SUID_CONFIG)
|
||||||
|
parse_config_file();
|
||||||
|
|
||||||
if (!strncmp(name, "busybox", 7)) busybox_main(argc, argv);
|
if (!strncmp(name, "busybox", 7))
|
||||||
|
exit(busybox_main(argc, argv));
|
||||||
/* Do a binary search to find the applet entry given the name. */
|
/* Do a binary search to find the applet entry given the name. */
|
||||||
applet_using = find_applet_by_name(name);
|
applet_using = find_applet_by_name(name);
|
||||||
if (applet_using) {
|
if (applet_using) {
|
||||||
applet_name = applet_using->name;
|
applet_name = applet_using->name;
|
||||||
if(argc==2 && !strcmp(argv[1], "--help")) bb_show_usage();
|
if (argc == 2 && !strcmp(argv[1], "--help"))
|
||||||
if(ENABLE_FEATURE_SUID) check_suid(applet_using);
|
bb_show_usage();
|
||||||
exit((*(applet_using->main))(argc, argv));
|
if (ENABLE_FEATURE_SUID)
|
||||||
|
check_suid(applet_using);
|
||||||
|
exit(applet_using->main(argc, argv));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,24 +26,24 @@ static const char* const install_dir[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* abstract link() */
|
/* abstract link() */
|
||||||
typedef int (*__link_f)(const char *, const char *);
|
typedef int (*link_func)(const char *, const char *);
|
||||||
|
|
||||||
/* create (sym)links for each applet */
|
/* create (sym)links for each applet */
|
||||||
static void install_links(const char *busybox, int use_symbolic_links)
|
static void install_links(const char *busybox, int use_symbolic_links)
|
||||||
{
|
{
|
||||||
__link_f Link = link;
|
link_func lf = link;
|
||||||
|
|
||||||
char *fpc;
|
char *fpc;
|
||||||
int i;
|
int i;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (use_symbolic_links)
|
if (use_symbolic_links)
|
||||||
Link = symlink;
|
lf = symlink;
|
||||||
|
|
||||||
for (i = 0; applets[i].name != NULL; i++) {
|
for (i = 0; applets[i].name != NULL; i++) {
|
||||||
fpc = concat_path_file(
|
fpc = concat_path_file(
|
||||||
install_dir[applets[i].location], applets[i].name);
|
install_dir[applets[i].location],
|
||||||
rc = Link(busybox, fpc);
|
applets[i].name);
|
||||||
|
rc = lf(busybox, fpc);
|
||||||
if (rc != 0 && errno != EEXIST) {
|
if (rc != 0 && errno != EEXIST) {
|
||||||
bb_perror_msg("%s", fpc);
|
bb_perror_msg("%s", fpc);
|
||||||
}
|
}
|
||||||
@ -60,9 +60,10 @@ int main(int argc, char **argv)
|
|||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
applet_name = argv[0];
|
applet_name = argv[0];
|
||||||
if (*applet_name == '-') applet_name++;
|
if (*applet_name == '-')
|
||||||
for (s = applet_name; *s ;)
|
applet_name++;
|
||||||
if (*(s++) == '/') applet_name = s;
|
while ((s = strchr(applet_name, '/')))
|
||||||
|
applet_name = s + 1;
|
||||||
|
|
||||||
/* Set locale for everybody except 'init' */
|
/* Set locale for everybody except 'init' */
|
||||||
if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
|
if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
|
||||||
@ -81,26 +82,22 @@ int busybox_main(int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
if (ENABLE_FEATURE_INSTALLER && argc > 1 && !strcmp(argv[1], "--install")) {
|
if (ENABLE_FEATURE_INSTALLER && argc > 1 && !strcmp(argv[1], "--install")) {
|
||||||
int use_symbolic_links = 0;
|
int use_symbolic_links = 0;
|
||||||
int rc = 0;
|
|
||||||
char *busybox;
|
char *busybox;
|
||||||
|
|
||||||
/* to use symlinks, or not to use symlinks... */
|
/* to use symlinks, or not to use symlinks... */
|
||||||
if (argc > 2) {
|
if (argc > 2)
|
||||||
if ((strcmp(argv[2], "-s") == 0)) {
|
if (strcmp(argv[2], "-s") == 0)
|
||||||
use_symbolic_links = 1;
|
use_symbolic_links = 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* link */
|
/* link */
|
||||||
// XXX: FIXME: this is broken. Why not just use argv[0] ?
|
// XXX: FIXME: this is broken. Why not just use argv[0] ?
|
||||||
busybox = xreadlink("/proc/self/exe");
|
busybox = xreadlink("/proc/self/exe");
|
||||||
if (busybox) {
|
if (!busybox)
|
||||||
|
return 1;
|
||||||
install_links(busybox, use_symbolic_links);
|
install_links(busybox, use_symbolic_links);
|
||||||
|
if (ENABLE_FEATURE_CLEAN_UP)
|
||||||
free(busybox);
|
free(busybox);
|
||||||
} else {
|
return 0;
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Deal with --help. (Also print help when called with no arguments) */
|
/* Deal with --help. (Also print help when called with no arguments) */
|
||||||
@ -113,12 +110,13 @@ int busybox_main(int argc, char **argv)
|
|||||||
const struct BB_applet *a;
|
const struct BB_applet *a;
|
||||||
int col, output_width;
|
int col, output_width;
|
||||||
|
|
||||||
|
output_width = 80 - sizeof("start-stop-daemon, ") - 8;
|
||||||
if (ENABLE_FEATURE_AUTOWIDTH) {
|
if (ENABLE_FEATURE_AUTOWIDTH) {
|
||||||
/* Obtain the terminal width. */
|
/* Obtain the terminal width. */
|
||||||
get_terminal_width_height(0, &output_width, NULL);
|
get_terminal_width_height(0, &output_width, NULL);
|
||||||
/* leading tab and room to wrap */
|
/* leading tab and room to wrap */
|
||||||
output_width -= sizeof("start-stop-daemon, ") + 8;
|
output_width -= sizeof("start-stop-daemon, ") + 8;
|
||||||
} else output_width = 80 - sizeof("start-stop-daemon, ") - 8;
|
}
|
||||||
|
|
||||||
printf("%s\n"
|
printf("%s\n"
|
||||||
"Copyright (C) 1998-2006 Erik Andersen, Rob Landley, and others.\n"
|
"Copyright (C) 1998-2006 Erik Andersen, Rob Landley, and others.\n"
|
||||||
@ -130,17 +128,17 @@ int busybox_main(int argc, char **argv)
|
|||||||
"\tlink to busybox for each function they wish to use and BusyBox\n"
|
"\tlink to busybox for each function they wish to use and BusyBox\n"
|
||||||
"\twill act like whatever it was invoked as!\n"
|
"\twill act like whatever it was invoked as!\n"
|
||||||
"\nCurrently defined functions:\n", bb_msg_full_version);
|
"\nCurrently defined functions:\n", bb_msg_full_version);
|
||||||
|
|
||||||
col = 0;
|
col = 0;
|
||||||
for(a = applets; a->name;) {
|
for(a = applets; a->name;) {
|
||||||
col += printf("%s%s", (col ? ", " : "\t"), (a++)->name);
|
col += printf("%s%s", (col ? ", " : "\t"), a->name);
|
||||||
|
a++;
|
||||||
if (col > output_width && a->name) {
|
if (col > output_width && a->name) {
|
||||||
printf(",\n");
|
puts(",");
|
||||||
col = 0;
|
col = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("\n\n");
|
puts("\n");
|
||||||
exit(0);
|
return 0;
|
||||||
}
|
}
|
||||||
} else run_applet_by_name(argv[1], argc - 1, argv + 1);
|
} else run_applet_by_name(argv[1], argc - 1, argv + 1);
|
||||||
|
|
||||||
|
@ -31,8 +31,9 @@ struct BB_applet {
|
|||||||
__extension__ enum SUIDRoot need_suid:4;
|
__extension__ enum SUIDRoot need_suid:4;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* From busybox.c */
|
/* From busybox.c and applet.c */
|
||||||
extern const struct BB_applet applets[];
|
extern const struct BB_applet applets[];
|
||||||
|
extern const unsigned short NUM_APPLETS;
|
||||||
|
|
||||||
/* Automagically pull in all the applet function prototypes and
|
/* Automagically pull in all the applet function prototypes and
|
||||||
* applet usage strings. These are all of the form:
|
* applet usage strings. These are all of the form:
|
||||||
|
@ -11893,19 +11893,13 @@ static int helpcmd(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
|
#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
|
||||||
{
|
|
||||||
extern const struct BB_applet applets[];
|
|
||||||
extern const size_t NUM_APPLETS;
|
|
||||||
|
|
||||||
for (i = 0; i < NUM_APPLETS; i++) {
|
for (i = 0; i < NUM_APPLETS; i++) {
|
||||||
|
|
||||||
col += out1fmt("%c%s", ((col == 0) ? '\t' : ' '), applets[i].name);
|
col += out1fmt("%c%s", ((col == 0) ? '\t' : ' '), applets[i].name);
|
||||||
if (col > 60) {
|
if (col > 60) {
|
||||||
out1fmt("\n");
|
out1fmt("\n");
|
||||||
col = 0;
|
col = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
out1fmt("\n\n");
|
out1fmt("\n\n");
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@ -3243,8 +3243,8 @@ static int dohelp(struct op *t)
|
|||||||
int col;
|
int col;
|
||||||
const struct builtincmd *x;
|
const struct builtincmd *x;
|
||||||
|
|
||||||
printf("\nBuilt-in commands:\n");
|
puts("\nBuilt-in commands:\n"
|
||||||
printf("-------------------\n");
|
"-------------------");
|
||||||
|
|
||||||
for (col = 0, x = builtincmds; x->builtinfunc != NULL; x++) {
|
for (col = 0, x = builtincmds; x->builtinfunc != NULL; x++) {
|
||||||
if (!x->name)
|
if (!x->name)
|
||||||
@ -3259,8 +3259,6 @@ static int dohelp(struct op *t)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const struct BB_applet *applet;
|
const struct BB_applet *applet;
|
||||||
extern const struct BB_applet applets[];
|
|
||||||
extern const size_t NUM_APPLETS;
|
|
||||||
|
|
||||||
for (i = 0, applet = applets; i < NUM_APPLETS; applet++, i++) {
|
for (i = 0, applet = applets; i < NUM_APPLETS; applet++, i++) {
|
||||||
if (!applet->name)
|
if (!applet->name)
|
||||||
@ -3274,7 +3272,7 @@ static int dohelp(struct op *t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
printf("\n\n");
|
puts("\n");
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user