aboutsummaryrefslogtreecommitdiff
path: root/include/applets.src.h
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-11-17 17:48:14 +0000
committerDenys Vlasenko <vda.linux@googlemail.com>2018-11-17 21:16:33 +0100
commit3778898f97a64e7b42b53194af7f3b93cc9c07a3 (patch)
tree9452b954be8861feff32a40072615ee95caaa4c6 /include/applets.src.h
parente6a63bf683f47027d36dc21b62b2f5cc3eb30a30 (diff)
downloadbusybox-w32-3778898f97a64e7b42b53194af7f3b93cc9c07a3.tar.gz
busybox-w32-3778898f97a64e7b42b53194af7f3b93cc9c07a3.tar.bz2
busybox-w32-3778898f97a64e7b42b53194af7f3b93cc9c07a3.zip
Treat custom and applet scripts as applets
BusyBox has support for embedded shell scripts. Two types can be distinguished: custom scripts and scripts implementing applets. Custom scripts should be placed in the 'embed' directory at build time. They are given a default applet configuration and appear as applets to the user but no further configuration is possible. Applet scripts are integrated with the BusyBox build system and are intended to be used to ship standard applets that just happen to be implemented as scripts. They can be configured at build time and appear just like native applets. Such scripts should be placed in the 'applets_sh' directory. A stub C program should be written to provide the usual applet configuration details and placed in a suitable subsystem directory. It may be helpful to have a configuration option to enable any dependencies the script requires: see the 'nologin' applet for an example. function old new delta scripted_main - 41 +41 applet_names 2773 2781 +8 applet_main 1600 1604 +4 i2cdetect_main 672 674 +2 applet_suid 100 101 +1 applet_install_loc 200 201 +1 applet_flags 100 101 +1 packed_usage 33180 33179 -1 tryexec 159 152 -7 evalcommand 1661 1653 -8 script_names 9 - -9 packed_scripts 123 114 -9 complete_cmd_dir_file 826 811 -15 shellexec 271 254 -17 find_command 1007 990 -17 busybox_main 642 624 -18 run_applet_and_exit 100 78 -22 find_script_by_name 51 - -51 ------------------------------------------------------------------------------ (add/remove: 1/2 grow/shrink: 6/9 up/down: 58/-174) Total: -116 bytes text data bss dec hex filename 950034 477 7296 957807 e9d6f busybox_old 949918 477 7296 957691 e9cfb busybox_unstripped Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'include/applets.src.h')
-rw-r--r--include/applets.src.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/applets.src.h b/include/applets.src.h
index 2ddf120ad..a9db5d160 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -22,41 +22,60 @@ s - suid type:
22 BB_SUID_REQUIRE or BB_SUID_MAYBE applet. 22 BB_SUID_REQUIRE or BB_SUID_MAYBE applet.
23*/ 23*/
24 24
25#define NOUSAGE_STR "\b"
26
27#define dummy_trivial_usage NOUSAGE_STR \
28
29#define dummy_full_usage "" \
30
25#if defined(PROTOTYPES) 31#if defined(PROTOTYPES)
26# define APPLET(name,l,s) int name##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 32# define APPLET(name,l,s) int name##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
27# define APPLET_ODDNAME(name,main,l,s,help) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 33# define APPLET_ODDNAME(name,main,l,s,help) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
28# define APPLET_NOEXEC(name,main,l,s,help) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 34# define APPLET_NOEXEC(name,main,l,s,help) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
29# define APPLET_NOFORK(name,main,l,s,help) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 35# define APPLET_NOFORK(name,main,l,s,help) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
36# define APPLET_SCRIPTED(name,main,l,s,help)
30 37
31#elif defined(NAME_MAIN) 38#elif defined(NAME_MAIN)
32# define APPLET(name,l,s) name name##_main 39# define APPLET(name,l,s) name name##_main
33# define APPLET_ODDNAME(name,main,l,s,help) name main##_main 40# define APPLET_ODDNAME(name,main,l,s,help) name main##_main
34# define APPLET_NOEXEC(name,main,l,s,help) name main##_main 41# define APPLET_NOEXEC(name,main,l,s,help) name main##_main
35# define APPLET_NOFORK(name,main,l,s,help) name main##_main 42# define APPLET_NOFORK(name,main,l,s,help) name main##_main
43# define APPLET_SCRIPTED(name,main,l,s,help) name scripted_main
36 44
37#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE 45#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE
38# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage name##_full_usage) 46# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage name##_full_usage)
39# define APPLET_ODDNAME(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage) 47# define APPLET_ODDNAME(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage)
40# define APPLET_NOEXEC(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage) 48# define APPLET_NOEXEC(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage)
41# define APPLET_NOFORK(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage) 49# define APPLET_NOFORK(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage)
50# define APPLET_SCRIPTED(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage help##_full_usage)
42 51
43#elif defined(MAKE_USAGE) && !ENABLE_FEATURE_VERBOSE_USAGE 52#elif defined(MAKE_USAGE) && !ENABLE_FEATURE_VERBOSE_USAGE
44# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage) 53# define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage)
45# define APPLET_ODDNAME(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage) 54# define APPLET_ODDNAME(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage)
46# define APPLET_NOEXEC(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage) 55# define APPLET_NOEXEC(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage)
47# define APPLET_NOFORK(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage) 56# define APPLET_NOFORK(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage)
57# define APPLET_SCRIPTED(name,main,l,s,help) MAKE_USAGE(#name, help##_trivial_usage)
48 58
49#elif defined(MAKE_LINKS) 59#elif defined(MAKE_LINKS)
50# define APPLET(name,l,c) LINK l name 60# define APPLET(name,l,c) LINK l name
51# define APPLET_ODDNAME(name,main,l,s,help) LINK l name 61# define APPLET_ODDNAME(name,main,l,s,help) LINK l name
52# define APPLET_NOEXEC(name,main,l,s,help) LINK l name 62# define APPLET_NOEXEC(name,main,l,s,help) LINK l name
53# define APPLET_NOFORK(name,main,l,s,help) LINK l name 63# define APPLET_NOFORK(name,main,l,s,help) LINK l name
64# define APPLET_SCRIPTED(name,main,l,s,help) LINK l name
54 65
55#elif defined(MAKE_SUID) 66#elif defined(MAKE_SUID)
56# define APPLET(name,l,s) SUID s l name 67# define APPLET(name,l,s) SUID s l name
57# define APPLET_ODDNAME(name,main,l,s,help) SUID s l name 68# define APPLET_ODDNAME(name,main,l,s,help) SUID s l name
58# define APPLET_NOEXEC(name,main,l,s,help) SUID s l name 69# define APPLET_NOEXEC(name,main,l,s,help) SUID s l name
59# define APPLET_NOFORK(name,main,l,s,help) SUID s l name 70# define APPLET_NOFORK(name,main,l,s,help) SUID s l name
71# define APPLET_SCRIPTED(name,main,l,s,help) SUID s l name
72
73#elif defined(MAKE_SCRIPTS)
74# define APPLET(name,l,s)
75# define APPLET_ODDNAME(name,main,l,s,help)
76# define APPLET_NOEXEC(name,main,l,s,help)
77# define APPLET_NOFORK(name,main,l,s,help)
78# define APPLET_SCRIPTED(name,main,l,s,help) SCRIPT name
60 79
61#else 80#else
62 static struct bb_applet applets[] = { /* name, main, location, need_suid */ 81 static struct bb_applet applets[] = { /* name, main, location, need_suid */
@@ -64,6 +83,7 @@ s - suid type:
64# define APPLET_ODDNAME(name,main,l,s,help) { #name, #main, l, s }, 83# define APPLET_ODDNAME(name,main,l,s,help) { #name, #main, l, s },
65# define APPLET_NOEXEC(name,main,l,s,help) { #name, #main, l, s, 1 }, 84# define APPLET_NOEXEC(name,main,l,s,help) { #name, #main, l, s, 1 },
66# define APPLET_NOFORK(name,main,l,s,help) { #name, #main, l, s, 1, 1 }, 85# define APPLET_NOFORK(name,main,l,s,help) { #name, #main, l, s, 1, 1 },
86# define APPLET_SCRIPTED(name,main,l,s,help) { #name, #main, l, s },
67#endif 87#endif
68 88
69#if ENABLE_INSTALL_NO_USR 89#if ENABLE_INSTALL_NO_USR
@@ -84,3 +104,4 @@ INSERT
84#undef APPLET_ODDNAME 104#undef APPLET_ODDNAME
85#undef APPLET_NOEXEC 105#undef APPLET_NOEXEC
86#undef APPLET_NOFORK 106#undef APPLET_NOFORK
107#undef APPLET_SCRIPTED