aboutsummaryrefslogtreecommitdiff
path: root/findutils/find.c
diff options
context:
space:
mode:
authorvda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2007-04-09 21:32:30 +0000
committervda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2007-04-09 21:32:30 +0000
commitdb15f9c96ab5d863a1304ae3a9be06b0bcad08be (patch)
treeb9509ed21e0a7af26128b796a66a3294ae4dc5b0 /findutils/find.c
parentd4dff44cca59ed0be3ff624fd3cb7a7ef526f4c9 (diff)
downloadbusybox-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.c32
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)
238ACTF(exec) 238ACTF(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