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;
|
||||
|
||||
/* 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
|
||||
@ -459,8 +459,6 @@ static int applet_name_compare(const void *name, const void *vapplet)
|
||||
return strcmp(name, applet->name);
|
||||
}
|
||||
|
||||
extern const size_t NUM_APPLETS;
|
||||
|
||||
struct BB_applet *find_applet_by_name(const char *name)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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. */
|
||||
applet_using = find_applet_by_name(name);
|
||||
if (applet_using) {
|
||||
applet_name = applet_using->name;
|
||||
if(argc==2 && !strcmp(argv[1], "--help")) bb_show_usage();
|
||||
if(ENABLE_FEATURE_SUID) check_suid(applet_using);
|
||||
exit((*(applet_using->main))(argc, argv));
|
||||
if (argc == 2 && !strcmp(argv[1], "--help"))
|
||||
bb_show_usage();
|
||||
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() */
|
||||
typedef int (*__link_f)(const char *, const char *);
|
||||
typedef int (*link_func)(const char *, const char *);
|
||||
|
||||
/* create (sym)links for each applet */
|
||||
static void install_links(const char *busybox, int use_symbolic_links)
|
||||
{
|
||||
__link_f Link = link;
|
||||
|
||||
link_func lf = link;
|
||||
char *fpc;
|
||||
int i;
|
||||
int rc;
|
||||
|
||||
if (use_symbolic_links)
|
||||
Link = symlink;
|
||||
lf = symlink;
|
||||
|
||||
for (i = 0; applets[i].name != NULL; i++) {
|
||||
fpc = concat_path_file(
|
||||
install_dir[applets[i].location], applets[i].name);
|
||||
rc = Link(busybox, fpc);
|
||||
install_dir[applets[i].location],
|
||||
applets[i].name);
|
||||
rc = lf(busybox, fpc);
|
||||
if (rc != 0 && errno != EEXIST) {
|
||||
bb_perror_msg("%s", fpc);
|
||||
}
|
||||
@ -60,9 +60,10 @@ int main(int argc, char **argv)
|
||||
const char *s;
|
||||
|
||||
applet_name = argv[0];
|
||||
if (*applet_name == '-') applet_name++;
|
||||
for (s = applet_name; *s ;)
|
||||
if (*(s++) == '/') applet_name = s;
|
||||
if (*applet_name == '-')
|
||||
applet_name++;
|
||||
while ((s = strchr(applet_name, '/')))
|
||||
applet_name = s + 1;
|
||||
|
||||
/* Set locale for everybody except 'init' */
|
||||
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")) {
|
||||
int use_symbolic_links = 0;
|
||||
int rc = 0;
|
||||
char *busybox;
|
||||
|
||||
/* to use symlinks, or not to use symlinks... */
|
||||
if (argc > 2) {
|
||||
if ((strcmp(argv[2], "-s") == 0)) {
|
||||
if (argc > 2)
|
||||
if (strcmp(argv[2], "-s") == 0)
|
||||
use_symbolic_links = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* link */
|
||||
// XXX: FIXME: this is broken. Why not just use argv[0] ?
|
||||
busybox = xreadlink("/proc/self/exe");
|
||||
if (busybox) {
|
||||
if (!busybox)
|
||||
return 1;
|
||||
install_links(busybox, use_symbolic_links);
|
||||
if (ENABLE_FEATURE_CLEAN_UP)
|
||||
free(busybox);
|
||||
} else {
|
||||
rc = 1;
|
||||
}
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
int col, output_width;
|
||||
|
||||
output_width = 80 - sizeof("start-stop-daemon, ") - 8;
|
||||
if (ENABLE_FEATURE_AUTOWIDTH) {
|
||||
/* Obtain the terminal width. */
|
||||
get_terminal_width_height(0, &output_width, NULL);
|
||||
/* leading tab and room to wrap */
|
||||
output_width -= sizeof("start-stop-daemon, ") + 8;
|
||||
} else output_width = 80 - sizeof("start-stop-daemon, ") - 8;
|
||||
}
|
||||
|
||||
printf("%s\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"
|
||||
"\twill act like whatever it was invoked as!\n"
|
||||
"\nCurrently defined functions:\n", bb_msg_full_version);
|
||||
|
||||
col = 0;
|
||||
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) {
|
||||
printf(",\n");
|
||||
puts(",");
|
||||
col = 0;
|
||||
}
|
||||
}
|
||||
printf("\n\n");
|
||||
exit(0);
|
||||
puts("\n");
|
||||
return 0;
|
||||
}
|
||||
} else run_applet_by_name(argv[1], argc - 1, argv + 1);
|
||||
|
||||
|
@ -31,8 +31,9 @@ struct BB_applet {
|
||||
__extension__ enum SUIDRoot need_suid:4;
|
||||
};
|
||||
|
||||
/* From busybox.c */
|
||||
/* From busybox.c and applet.c */
|
||||
extern const struct BB_applet applets[];
|
||||
extern const unsigned short NUM_APPLETS;
|
||||
|
||||
/* Automagically pull in all the applet function prototypes and
|
||||
* 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
|
||||
{
|
||||
extern const struct BB_applet applets[];
|
||||
extern const size_t NUM_APPLETS;
|
||||
|
||||
for (i = 0; i < NUM_APPLETS; i++) {
|
||||
|
||||
col += out1fmt("%c%s", ((col == 0) ? '\t' : ' '), applets[i].name);
|
||||
if (col > 60) {
|
||||
out1fmt("\n");
|
||||
col = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
out1fmt("\n\n");
|
||||
return EXIT_SUCCESS;
|
||||
|
@ -3243,8 +3243,8 @@ static int dohelp(struct op *t)
|
||||
int col;
|
||||
const struct builtincmd *x;
|
||||
|
||||
printf("\nBuilt-in commands:\n");
|
||||
printf("-------------------\n");
|
||||
puts("\nBuilt-in commands:\n"
|
||||
"-------------------");
|
||||
|
||||
for (col = 0, x = builtincmds; x->builtinfunc != NULL; x++) {
|
||||
if (!x->name)
|
||||
@ -3259,8 +3259,6 @@ static int dohelp(struct op *t)
|
||||
{
|
||||
int i;
|
||||
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++) {
|
||||
if (!applet->name)
|
||||
@ -3274,7 +3272,7 @@ static int dohelp(struct op *t)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
printf("\n\n");
|
||||
puts("\n");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user