if (argc > 2) {
/* set name for proper "<name>: applet not found" */
applet_name = argv[2];
- run_applet_by_name(applet_name, 2, argv);
+ run_applet_and_exit(applet_name, 2, argv);
} else {
const struct bb_applet *a;
int col, output_width;
} else {
/* we want "<argv[1]>: applet not found", not "busybox: ..." */
applet_name = argv[1];
- run_applet_by_name(argv[1], argc - 1, argv + 1);
+ run_applet_and_exit(argv[1], argc - 1, argv + 1);
}
bb_error_msg_and_die("applet not found");
exit(current_applet->main(argc, argv));
}
-void run_applet_by_name(const char *name, int argc, char **argv)
+void run_applet_and_exit(const char *name, int argc, char **argv)
{
current_applet = find_applet_by_name(name);
if (current_applet)
if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
setlocale(LC_ALL, "");
- run_applet_by_name(applet_name, argc, argv);
+ run_applet_and_exit(applet_name, argc, argv);
bb_error_msg_and_die("applet not found");
}
<p>Busybox execution starts with the main() function in applets/busybox.c,
which sets the global variable applet_name to argv[0] and calls
-run_applet_by_name() in applets/applets.c. That uses the applets[] array
+run_applet_and_exit() in applets/applets.c. That uses the applets[] array
(defined in include/busybox.h and filled out in include/applets.h) to
transfer control to the appropriate APPLET_main() function (such as
cat_main() or sed_main()). The individual applet takes it from there.</p>
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_applet_and_exit(const char *name, int argc, char **argv);
extern void run_current_applet_and_exit(int argc, char **argv) ATTRIBUTE_NORETURN;
#endif
gcc -Os -o build/$APPLET applets/individual.c $j \
`extra_libraries $APPFILT` libbb/libbb.a -Iinclude \
-DBUILD_INDIVIDUAL \
- '-Drun_applet_by_name(...)' '-Dfind_applet_by_name(...)=0' \
+ '-Drun_applet_and_exit(...)' '-Dfind_applet_by_name(...)=0' \
-DAPPLET_main=${APPFILT}_main -DAPPLET_full_usage=${HELPNAME}
if [ $? -ne 0 ];
then
int status;
pid_t pid=fork();
if(!pid) {
- run_applet_by_name(cmd->argv[0],cmd->argc,cmd->argv);
+ run_applet_and_exit(cmd->argv[0],cmd->argc,cmd->argv);
execvp(cmd->argv[0],cmd->argv);
printf("No %s",cmd->argv[0]);
exit(1);
/**/;
optind = 1;
debug_printf("running applet %s\n", name);
- run_applet_by_name(name, argc_l, child->argv);
+ run_applet_and_exit(name, argc_l, child->argv);
}
#endif
debug_printf("exec of %s\n", child->argv[0]);
for (argc_l = 0; *argv_l; argv_l++, argc_l++);
optind = 1;
- run_applet_by_name(child->argv[0], argc_l, child->argv);
+ run_applet_and_exit(child->argv[0], argc_l, child->argv);
}
execvp(child->argv[0], child->argv);
optind = 1;
if (find_applet_by_name(name)) {
/* We have to exec here since we vforked. Running
- * run_applet_by_name() won't work and bad things
+ * run_applet_and_exit() won't work and bad things
* will happen. */
execve(CONFIG_BUSYBOX_EXEC_PATH, v, envp);
}