hush: use NOFORK applets as appropriate. Net reduction of code size.

This commit is contained in:
Denis Vlasenko
2007-04-14 10:09:57 +00:00
parent 16abcd90ae
commit f5294e1f4c
7 changed files with 125 additions and 114 deletions

View File

@@ -514,14 +514,14 @@ static void install_links(const char *busybox, int use_symbolic_links)
/* If we were called as "busybox..." */
static int busybox_main(int argc, char **argv)
static int busybox_main(char **argv)
{
if (ENABLE_FEATURE_INSTALLER && argc > 1 && !strcmp(argv[1], "--install")) {
if (ENABLE_FEATURE_INSTALLER && argv[1] && !strcmp(argv[1], "--install")) {
int use_symbolic_links = 0;
char *busybox;
/* to use symlinks, or not to use symlinks... */
if (argc > 2)
if (argv[2])
if (strcmp(argv[2], "-s") == 0)
use_symbolic_links = 1;
@@ -537,11 +537,12 @@ static int busybox_main(int argc, char **argv)
/* Deal with --help. Also print help when called with no arguments */
if (argc == 1 || !strcmp(argv[1], "--help") ) {
if (argc > 2) {
if (!argv[1] || !strcmp(argv[1], "--help") ) {
if (argv[2]) {
/* set name for proper "<name>: applet not found" */
applet_name = argv[2];
run_applet_and_exit(applet_name, 2, argv);
argv[2] = NULL;
run_applet_and_exit(applet_name, argv);
} else {
const struct bb_applet *a;
int col, output_width;
@@ -582,14 +583,19 @@ static int busybox_main(int argc, char **argv)
} else {
/* we want "<argv[1]>: applet not found", not "busybox: ..." */
applet_name = argv[1];
run_applet_and_exit(argv[1], argc - 1, argv + 1);
run_applet_and_exit(argv[1], argv + 1);
}
bb_error_msg_and_die("applet not found");
}
void run_current_applet_and_exit(int argc, char **argv)
void run_current_applet_and_exit(char **argv)
{
int argc = 1;
while (argv[argc])
argc++;
/* Reinit some shared global data */
optind = 1;
xfunc_error_retval = EXIT_FAILURE;
@@ -602,13 +608,13 @@ void run_current_applet_and_exit(int argc, char **argv)
exit(current_applet->main(argc, argv));
}
void run_applet_and_exit(const char *name, int argc, char **argv)
void run_applet_and_exit(const char *name, char **argv)
{
current_applet = find_applet_by_name(name);
if (current_applet)
run_current_applet_and_exit(argc, argv);
run_current_applet_and_exit(argv);
if (!strncmp(name, "busybox", 7))
exit(busybox_main(argc, argv));
exit(busybox_main(argv));
}
@@ -637,6 +643,6 @@ int main(int argc, char **argv)
if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
setlocale(LC_ALL, "");
run_applet_and_exit(applet_name, argc, argv);
run_applet_and_exit(applet_name, argv);
bb_error_msg_and_die("applet not found");
}