Ignore:
Timestamp:
Feb 25, 2011, 9:26:54 PM (13 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.18.3 to avoid problems with the tar command which is now failing on recent versions with busybox 1.7.3
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mindi-busybox/miscutils/setsid.c

    r1765 r2725  
    55 * In the public domain.
    66 *
    7  * 1999-02-22 Arkadiusz Mikiewicz <misiek@pld.ORG.PL>
     7 * 1999-02-22 Arkadiusz Mickiewicz <misiek@pld.ORG.PL>
    88 * - added Native Language Support
    99 *
     
    1717#include "libbb.h"
    1818
    19 int setsid_main(int argc, char **argv);
    20 int setsid_main(int argc, char **argv)
     19int setsid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
     20int setsid_main(int argc UNUSED_PARAM, char **argv)
    2121{
    22     if (argc < 2)
     22    if (!argv[1])
    2323        bb_show_usage();
    2424
    25     /* Comment why is this necessary? */
    26     if (getpgrp() == getpid())
    27         forkexit_or_rexec(argv);
     25    /* setsid() is allowed only when we are not a process group leader.
     26     * Otherwise our PID serves as PGID of some existing process group
     27     * and cannot be used as PGID of a new process group. */
     28    if (setsid() < 0) {
     29        pid_t pid = fork_or_rexec(argv);
     30        if (pid != 0) {
     31            /* parent */
     32            /* TODO:
     33             * we can waitpid(pid, &status, 0) and then even
     34             * emulate exitcode, making the behavior consistent
     35             * in both forked and non forked cases.
     36             * However, the code is larger and upstream
     37             * does not do such trick.
     38             */
     39            exit(EXIT_SUCCESS);
     40        }
    2841
    29     setsid();  /* no error possible */
     42        /* child */
     43        /* now there should be no error: */
     44        setsid();
     45    }
    3046
    31     BB_EXECVP(argv[1], argv + 1);
    32     bb_perror_msg_and_die("%s", argv[1]);
     47    argv++;
     48    BB_EXECVP_or_die(argv);
    3349}
Note: See TracChangeset for help on using the changeset viewer.