Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/procps/kill.c


Ignore:
Timestamp:
Dec 20, 2016, 4:07:32 PM (7 years ago)
Author:
Bruno Cornec
Message:

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

Location:
branches/3.3
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/3.3/mindi-busybox/procps/kill.c

    r3232 r3621  
    6161 */
    6262
    63 int kill_main(int argc, char **argv)
     63int kill_main(int argc UNUSED_PARAM, char **argv)
    6464{
    6565    char *arg;
     
    8080
    8181    /* Parse any options */
    82     argc--;
    8382    arg = *++argv;
    8483
    85     if (argc < 1 || arg[0] != '-') {
     84    if (!arg || arg[0] != '-') {
    8685        goto do_it_now;
    8786    }
     
    9291     * We try to mimic what kill from coreutils-6.8 does */
    9392    if (arg[1] == 'l' && arg[2] == '\0') {
    94         if (argc == 1) {
     93        arg = *++argv;
     94        if (!arg) {
    9595            /* Print the whole signal list */
    9696            print_signames();
     
    9898        }
    9999        /* -l <sig list> */
    100         while ((arg = *++argv)) {
     100        do {
    101101            if (isdigit(arg[0])) {
    102102                signo = bb_strtou(arg, NULL, 10);
     
    119119                printf("%d\n", signo);
    120120            }
    121         }
    122         /* If they specified -l, we are all done */
     121            arg = *++argv;
     122        } while (arg);
    123123        return EXIT_SUCCESS;
    124124    }
     
    128128        quiet = 1;
    129129        arg = *++argv;
    130         argc--;
    131         if (argc < 1)
     130        if (!arg)
    132131            bb_show_usage();
    133132        if (arg[0] != '-')
     
    141140        goto do_it_now;
    142141
    143     if (argc > 1 && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
    144         argc--;
     142    if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
    145143        arg = *++argv;
    146144    } /* else it must be -SIG */
     
    151149    }
    152150    arg = *++argv;
    153     argc--;
    154151
    155152 do_it_now:
     
    159156        pid_t sid;
    160157        procps_status_t* p = NULL;
    161         int ret = 0;
     158        /* compat: exitcode 2 is "no one was signaled" */
     159        int ret = 2;
    162160
    163161        /* Find out our session id */
     
    168166        /* Signal all processes except those in our session */
    169167        while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) {
    170             int i;
     168            char **args;
    171169
    172170            if (p->sid == (unsigned)sid
     171             || p->sid == 0 /* compat: kernel thread, don't signal it */
    173172             || p->pid == (unsigned)pid
    174173             || p->pid == 1
     
    179178            /* All remaining args must be -o PID options.
    180179             * Check p->pid against them. */
    181             for (i = 0; i < argc; i++) {
     180            args = argv;
     181            while (*args) {
    182182                pid_t omit;
    183183
    184                 arg = argv[i];
     184                arg = *args++;
    185185                if (arg[0] != '-' || arg[1] != 'o') {
    186186                    bb_error_msg("bad option '%s'", arg);
     
    189189                }
    190190                arg += 2;
    191                 if (!arg[0] && argv[++i])
    192                     arg = argv[i];
     191                if (!arg[0] && *args)
     192                    arg = *args++;
    193193                omit = bb_strtoi(arg, NULL, 10);
    194194                if (errno) {
     
    201201            }
    202202            kill(p->pid, signo);
     203            ret = 0;
    203204 dont_kill: ;
    204205        }
     
    211212
    212213    /* Pid or name is required for kill/killall */
    213     if (argc < 1) {
     214    if (!arg) {
    214215        bb_error_msg("you need to specify whom to kill");
    215216        return EXIT_FAILURE;
     
    218219    if (killall) {
    219220        /* Looks like they want to do a killall.  Do that */
    220         while (arg) {
     221        do {
    221222            pid_t* pidList;
    222223
     
    241242            free(pidList);
    242243            arg = *++argv;
    243         }
     244        } while (arg);
    244245        return errors;
    245246    }
Note: See TracChangeset for help on using the changeset viewer.