| … | |
… | |
| 467 | free (fifo); |
467 | free (fifo); |
| 468 | free (file); |
468 | free (file); |
| 469 | return (-1); |
469 | return (-1); |
| 470 | } |
470 | } |
| 471 | |
471 | |
| 472 | if ((pid = fork ()) == 0) { |
472 | if ((pid = vfork ()) == 0) { |
| 473 | char *myarg = rc_xstrdup (arg); |
|
|
| 474 | int e = 0; |
473 | int e = 0; |
| 475 | execl (file, file, myarg, (char *) NULL); |
474 | execl (file, file, arg, (char *) NULL); |
| 476 | e = errno; |
475 | e = errno; |
| 477 | free (myarg); |
|
|
| 478 | unlink (fifo); |
476 | unlink (fifo); |
| 479 | free (fifo); |
477 | free (fifo); |
| 480 | eerrorx ("unable to exec `%s': %s", file, strerror (errno)); |
478 | eerror ("unable to exec `%s': %s", file, strerror (errno)); |
|
|
479 | free (file); |
|
|
480 | _exit (EXIT_FAILURE); |
| 481 | } |
481 | } |
| 482 | |
482 | |
| 483 | free (fifo); |
483 | free (fifo); |
| 484 | free (file); |
484 | free (file); |
| 485 | |
485 | |
| 486 | if (pid == -1) { |
486 | if (pid == -1) { |
| 487 | eerror ("unable to fork: %s", strerror (errno)); |
487 | eerror ("vfork: %s", strerror (errno)); |
| 488 | return (pid); |
488 | return (pid); |
| 489 | } |
489 | } |
| 490 | |
490 | |
| 491 | if (rc_is_env ("RC_PARALLEL_STARTUP", "yes")) |
491 | if (rc_is_env ("RC_PARALLEL_STARTUP", "yes")) |
| 492 | return (pid); |
492 | return (pid); |