From c44ab01b75aba758fe0aff4b34b25d733e370dc2 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Mon, 9 Apr 2007 03:11:58 +0000 Subject: Improve STANDALONE_SHELL. "safe" applets are renamed NOEXEC applets and now this fact is recorded in applets.h, not ash.c. Several fixes to "--help + STANDALONE_SHELL" scenarios. function old new delta run_current_applet_and_exit - 355 +355 arith 2064 2073 +9 refresh 1148 1156 +8 getopt32 1068 1073 +5 telnet_main 1510 1514 +4 md5_sha1_sum_main 565 566 +1 xstrtoul_range_sfx 255 251 -4 packed_usage 22523 22514 -9 tryexec 255 203 -52 static.safe_applets 152 - -152 .rodata 131320 131128 -192 run_applet_by_name 869 506 -363 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 5/5 up/down: 382/-772) Total: -390 bytes ./busybox ash -c 'i=20000; while test $i != 0; do touch z; i=$((i-1)); done' runs more than twice as fast with STANDALONE_SHELL versus without. --- include/busybox.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'include/busybox.h') diff --git a/include/busybox.h b/include/busybox.h index 988137497..6f4808778 100644 --- a/include/busybox.h +++ b/include/busybox.h @@ -27,8 +27,15 @@ enum SUIDRoot { struct BB_applet { const char *name; int (*main) (int argc, char **argv); - __extension__ enum Location location:4; - __extension__ enum SUIDRoot need_suid:4; + __extension__ enum Location location:8; + __extension__ enum SUIDRoot need_suid:8; + /* true if instead if fork(); exec("applet"); waitpid(); + * one can do fork(); exit(applet_main(argc,argv)); waitpid(); */ + unsigned char noexec; + /* Even nicer */ + /* true if instead if fork(); exec("applet"); waitpid(); + * one can simply call applet_main(argc,argv); */ + unsigned char nofork; }; /* Defined in applet.c */ -- cgit v1.2.3