diff options
author | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-04-09 21:32:30 +0000 |
---|---|---|
committer | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-04-09 21:32:30 +0000 |
commit | db15f9c96ab5d863a1304ae3a9be06b0bcad08be (patch) | |
tree | b9509ed21e0a7af26128b796a66a3294ae4dc5b0 /findutils/find.c | |
parent | d4dff44cca59ed0be3ff624fd3cb7a7ef526f4c9 (diff) | |
download | busybox-w32-db15f9c96ab5d863a1304ae3a9be06b0bcad08be.tar.gz busybox-w32-db15f9c96ab5d863a1304ae3a9be06b0bcad08be.tar.bz2 busybox-w32-db15f9c96ab5d863a1304ae3a9be06b0bcad08be.zip |
factor out NOFORK/NOEXEC code from find. Use it for xargs too.
git-svn-id: svn://busybox.net/trunk/busybox@18375 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'findutils/find.c')
-rw-r--r-- | findutils/find.c | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/findutils/find.c b/findutils/find.c index 7b5a09d56..1a1301b38 100644 --- a/findutils/find.c +++ b/findutils/find.c | |||
@@ -238,37 +238,19 @@ ACTF(inum) | |||
238 | ACTF(exec) | 238 | ACTF(exec) |
239 | { | 239 | { |
240 | int i, rc; | 240 | int i, rc; |
241 | char *argv[ap->exec_argc+1]; | 241 | char *argv[ap->exec_argc + 1]; |
242 | for (i = 0; i < ap->exec_argc; i++) | 242 | for (i = 0; i < ap->exec_argc; i++) |
243 | argv[i] = subst(ap->exec_argv[i], ap->subst_count[i], fileName); | 243 | argv[i] = subst(ap->exec_argv[i], ap->subst_count[i], fileName); |
244 | argv[i] = NULL; /* terminate the list */ | 244 | argv[i] = NULL; /* terminate the list */ |
245 | 245 | ||
246 | if (ENABLE_FEATURE_EXEC_PREFER_APPLETS) { | 246 | rc = spawn_and_wait(argv); |
247 | const struct BB_applet *a = find_applet_by_name(argv[0]); | ||
248 | if (a) { | ||
249 | if (a->nofork) { | ||
250 | rc = a->main(ap->exec_argc, argv); | ||
251 | goto f; | ||
252 | } | ||
253 | #ifndef BB_NOMMU | ||
254 | if (a->noexec) { | ||
255 | rc = fork(); | ||
256 | if (rc) goto w; | ||
257 | current_applet = a; | ||
258 | run_current_applet_and_exit(ap->exec_argc, argv); | ||
259 | } | ||
260 | #endif | ||
261 | } | ||
262 | } | ||
263 | rc = spawn(argv); | ||
264 | w: | ||
265 | rc = wait4pid(rc); | ||
266 | if (rc < 0) | 247 | if (rc < 0) |
267 | bb_perror_msg("%s", argv[0]); | 248 | bb_perror_msg("%s", argv[0]); |
268 | f: | 249 | |
269 | for (i = 0; i < ap->exec_argc; i++) | 250 | i = 0; |
270 | free(argv[i]); | 251 | while (argv[i]) |
271 | return rc == 0; /* return 1 if success */ | 252 | free(argv[i++]); |
253 | return rc == 0; /* return 1 if exitcode 0 */ | ||
272 | } | 254 | } |
273 | #endif | 255 | #endif |
274 | 256 | ||