aboutsummaryrefslogtreecommitdiff
path: root/docs/nofork_noexec.txt
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-01-26 00:27:53 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2017-01-26 00:27:53 +0100
commit06f20bf675cdd415c2f796ebea9fc55030ef49cc (patch)
tree04aa11f7829e346b630b2e8cb62a52d3b488d330 /docs/nofork_noexec.txt
parent7dd906a3884a31458d30fc43eb9885c5adf4bbea (diff)
downloadbusybox-w32-06f20bf675cdd415c2f796ebea9fc55030ef49cc.tar.gz
busybox-w32-06f20bf675cdd415c2f796ebea9fc55030ef49cc.tar.bz2
busybox-w32-06f20bf675cdd415c2f796ebea9fc55030ef49cc.zip
link: new applet
coreutils grew itself a tiny simplistic alternative to ln: Usage: link FILE LINK Create hard LINK to FILE function old new delta link_main - 75 +75 packed_usage 31114 31131 +17 applet_names 2564 2569 +5 applet_main 1480 1484 +4 applet_install_loc 185 186 +1 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/0 up/down: 102/0) Total: 102 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'docs/nofork_noexec.txt')
-rw-r--r--docs/nofork_noexec.txt32
1 files changed, 26 insertions, 6 deletions
diff --git a/docs/nofork_noexec.txt b/docs/nofork_noexec.txt
index c58f5a83f..2fb184a03 100644
--- a/docs/nofork_noexec.txt
+++ b/docs/nofork_noexec.txt
@@ -33,6 +33,7 @@ roughly are:
33* do not expect shared global variables/buffers to be in their 33* do not expect shared global variables/buffers to be in their
34 "initialized" state. Examples: xfunc_error_retval can be != 1, 34 "initialized" state. Examples: xfunc_error_retval can be != 1,
35 bb_common_bufsiz1 can be scribbled over, ... 35 bb_common_bufsiz1 can be scribbled over, ...
36 (although usually xfunc_error_retval's state is not a problem).
36* do not expect that stdio wasn't used before. Calling set[v]buf() 37* do not expect that stdio wasn't used before. Calling set[v]buf()
37 can be disastrous. 38 can be disastrous.
38* ... 39* ...
@@ -81,18 +82,37 @@ are probably not worth the effort.
81Any NOFORK applet is also a NOEXEC applet. 82Any NOFORK applet is also a NOEXEC applet.
82 83
83 84
85 Calling NOFORK applets
86
87API to call NOFORK applets is two functions:
88
89 run_nofork_applet(appno, argv)
90 spawn_and_wait(argv) // only if FEATURE_PREFER_APPLETS=y
91
92First one is directly used by shells if FEATURE_SH_NOFORK=y.
93Second one is used by many applets, but main users are xargs and find.
94It itself calls run_nofork_applet(), if argv[0] turned out to be a name
95of a NOFORK applet.
96
97run_nofork_applet() saves/inits/restores option parsing, xfunc_error_retval,
98applet_name. Thus, for example, caller does not need to worry about
99option_mask32 getting trashed.
100
101
84 Relevant CONFIG options 102 Relevant CONFIG options
85 103
86FEATURE_PREFER_APPLETS 104FEATURE_PREFER_APPLETS
87 BB_EXECVP(cmd, argv) will try to exec /proc/self/exe 105 BB_EXECVP(cmd, argv) will try to exec /proc/self/exe
88 if command's name matches some applet name 106 if command's name matches some applet name;
89 applet tables will contain NOFORK/NOEXEC bits
90 spawn_and_wait(argv) will do NOFORK/NOEXEC tricks 107 spawn_and_wait(argv) will do NOFORK/NOEXEC tricks
91 108
92FEATURE_SH_STANDALONE (needs FEATURE_PREFER_APPLETS=y) 109//TODO: the above two things probably should have separate options?
110
111FEATURE_SH_STANDALONE
93 shells will try to exec /proc/self/exe if command's name matches 112 shells will try to exec /proc/self/exe if command's name matches
94 some applet name 113 some applet name; shells will do NOEXEC trick on NOEXEC applets
95 shells will do NOEXEC trick on NOEXEC applets 114
115//TODO: split (same as for PREFER_APPLETS)
96 116
97FEATURE_SH_NOFORK (needs FEATURE_PREFER_APPLETS=y) 117FEATURE_SH_NOFORK
98 shells will do NOFORK trick on NOFORK applets 118 shells will do NOFORK trick on NOFORK applets