Find the appropriate directory for your new applet.
-Add the kbuild snippet to the .c file:
-
-//kbuild:lib-$(CONFIG_MU) += mu.o
-
Add the config snippet to the .c file:
//config:config MU
//config: bool "MU"
//config: default y
//config: help
-//config: Returns an indeterminate value.
+//config: Returns an indeterminate value.
+
+Add the kbuild snippet to the .c file:
+
+//kbuild:lib-$(CONFIG_MU) += mu.o
Usage String(s)
//usage:#define mu_trivial_usage
//usage: "[-abcde] FILE..."
-//usage:#define mu_full_usage
-//usage: "Returns an indeterminate value\n"
+//usage:#define mu_full_usage "\n\n"
+//usage: "Returns an indeterminate value"
+//usage: "\n"
//usage: "\n -a First function"
//usage: "\n -b Second function"
//usage: ...
for speeding up busybox shells, and more. NOEXEC and NOFORK applets
are exactly those applets which are eligible for these tricks.
-Applet will be subject to NOFORK/NOEXEC tricks if it is marked as such
-in applets.h. FEATURE_PREFER_APPLETS is a config option which
-globally enables usage of NOFORK/NOEXEC tricks.
-If it is enabled, FEATURE_SH_STANDALONE can be enabled too,
-and then shells will use NOFORK/NOEXEC tricks for ordinary commands.
-NB: shell builtins use these tricks regardless of FEATURE_SH_STANDALONE
-or FEATURE_PREFER_APPLETS.
+Applet will be subject to NOFORK/NOEXEC tricks only if it is marked
+as such in applets.src.h or in their inline "//applet:" directives.
In C, if you want to call a program and wait for it, use
spawn_and_wait(argv), BB_EXECVP(prog,argv) or BB_EXECLP(prog,argv0,...).
do NOFORK/NOEXEC thing depending on configuration.
+ Relevant CONFIG options
+
+FEATURE_PREFER_APPLETS
+ Globally enables NOFORK/NOEXEC tricks for such programs as xargs
+ and find:
+ BB_EXECVP(cmd, argv) will try to exec /proc/self/exe
+ if command's name matches some applet name;
+ spawn_and_wait(argv) will do NOFORK/NOEXEC tricks
+
+//TODO: the above two things probably should have separate options?
+
+FEATURE_SH_STANDALONE
+ shells will try to exec /proc/self/exe if command's name matches
+ some applet name; shells will do NOEXEC trick on NOEXEC applets
+
+//TODO: split (same as for PREFER_APPLETS)
+
+FEATURE_SH_NOFORK
+ shells will do NOFORK trick on NOFORK applets
+
+NB: shell builtins use these tricks regardless of FEATURE_SH_STANDALONE,
+FEATURE_PREFER_APPLETS or FEATURE_SH_NOFORK. In effect, builtins
+are "always NOFORK".
+
+
NOEXEC
NOEXEC applet should work correctly if another applet forks and then
It's the same trusty spawn_and_wait(argv). If FEATURE_PREFER_APPLETS=y,
it does NOEXEC trick. It resets xfunc_error_retval = 1 and
logmode = LOGMODE_STDIO in the child.
-
-
- Relevant CONFIG options
-
-FEATURE_PREFER_APPLETS
- BB_EXECVP(cmd, argv) will try to exec /proc/self/exe
- if command's name matches some applet name;
- spawn_and_wait(argv) will do NOFORK/NOEXEC tricks
-
-//TODO: the above two things probably should have separate options?
-
-FEATURE_SH_STANDALONE
- shells will try to exec /proc/self/exe if command's name matches
- some applet name; shells will do NOEXEC trick on NOEXEC applets
-
-//TODO: split (same as for PREFER_APPLETS)
-
-FEATURE_SH_NOFORK
- shells will do NOFORK trick on NOFORK applets