Changeset 1765 in MondoRescue for branches/2.2.5/mindi-busybox/procps/renice.c


Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (17 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/procps/renice.c

    r821 r1765  
    2020 */
    2121
    22 #include "busybox.h"
    23 #include <stdio.h>
    24 #include <stdlib.h>
    25 #include <string.h>
    26 #include <limits.h>
    27 #include <errno.h>
    28 #include <unistd.h>
     22#include "libbb.h"
    2923#include <sys/resource.h>
    3024
    31 #if (PRIO_PROCESS < CHAR_MIN) || (PRIO_PROCESS > CHAR_MAX)
    32 #error Assumption violated : PRIO_PROCESS value
    33 #endif
    34 #if (PRIO_PGRP < CHAR_MIN) || (PRIO_PGRP > CHAR_MAX)
    35 #error Assumption violated : PRIO_PGRP value
    36 #endif
    37 #if (PRIO_USER < CHAR_MIN) || (PRIO_USER > CHAR_MAX)
    38 #error Assumption violated : PRIO_USER value
    39 #endif
     25void BUG_bad_PRIO_PROCESS(void);
     26void BUG_bad_PRIO_PGRP(void);
     27void BUG_bad_PRIO_USER(void);
    4028
    41 static inline int int_add_no_wrap(int a, int b)
    42 {
    43     int s = a + b;
    44 
    45     if (b < 0) {
    46         if (s > a) s = INT_MIN;
    47     } else {
    48         if (s < a) s = INT_MAX;
    49     }
    50 
    51     return s;
    52 }
    53 
     29int renice_main(int argc, char **argv);
    5430int renice_main(int argc, char **argv)
    5531{
    56     static const char Xetpriority_msg[] = "%d : %cetpriority";
     32    static const char Xetpriority_msg[] ALIGN1 = "%cetpriority";
    5733
    5834    int retval = EXIT_SUCCESS;
     
    6036    int use_relative = 0;
    6137    int adjustment, new_priority;
    62     id_t who;
     38    unsigned who;
     39    char *arg;
    6340
    64     ++argv;
     41    /* Yes, they are not #defines in glibc 2.4! #if won't work */
     42    if (PRIO_PROCESS < CHAR_MIN || PRIO_PROCESS > CHAR_MAX)
     43        BUG_bad_PRIO_PROCESS();
     44    if (PRIO_PGRP < CHAR_MIN || PRIO_PGRP > CHAR_MAX)
     45        BUG_bad_PRIO_PGRP();
     46    if (PRIO_USER < CHAR_MIN || PRIO_USER > CHAR_MAX)
     47        BUG_bad_PRIO_USER();
     48
     49    arg = *++argv;
    6550
    6651    /* Check if we are using a relative adjustment. */
    67     if (argv[0] && (argv[0][0] == '-') && (argv[0][1] == 'n') && !argv[0][2]) {
     52    if (arg && arg[0] == '-' && arg[1] == 'n') {
    6853        use_relative = 1;
    69         ++argv;
     54        if (!arg[2])
     55            arg = *++argv;
     56        else
     57            arg += 2;
    7058    }
    7159
    72     if (!*argv) {               /* No args?  Then show usage. */
     60    if (!arg) {             /* No args?  Then show usage. */
    7361        bb_show_usage();
    7462    }
    7563
    7664    /* Get the priority adjustment (absolute or relative). */
    77     adjustment = bb_xgetlarg(*argv, 10, INT_MIN, INT_MAX);
     65    adjustment = xatoi_range(arg, INT_MIN/2, INT_MAX/2);
    7866
    79     while (*++argv) {
     67    while ((arg = *++argv) != NULL) {
    8068        /* Check for a mode switch. */
    81         if ((argv[0][0] == '-') && argv[0][1] && !argv[0][2]) {
    82             static const char opts[]
    83                 = { 'p', 'g', 'u', 0, PRIO_PROCESS, PRIO_PGRP, PRIO_USER };
    84             const char *p;
    85             if ((p = strchr(opts, argv[0][1]))) {
     69        if (arg[0] == '-' && arg[1]) {
     70            static const char opts[] ALIGN1 = {
     71                'p', 'g', 'u', 0, PRIO_PROCESS, PRIO_PGRP, PRIO_USER
     72            };
     73            const char *p = strchr(opts, arg[1]);
     74            if (p) {
    8675                which = p[4];
    87                 continue;
     76                if (!arg[2])
     77                    continue;
     78                arg += 2;
    8879            }
    8980        }
     
    9283        if (which == PRIO_USER) {
    9384            struct passwd *p;
    94             if (!(p = getpwnam(*argv))) {
    95                 bb_error_msg("unknown user: %s", *argv);
     85            p = getpwnam(arg);
     86            if (!p) {
     87                bb_error_msg("unknown user: %s", arg);
    9688                goto HAD_ERROR;
    9789            }
    9890            who = p->pw_uid;
    9991        } else {
    100             char *e;
    101             errno = 0;
    102             who = strtoul(*argv, &e, 10);
    103             if (*e || (*argv == e) || errno) {
    104                 bb_error_msg("bad value: %s", *argv);
     92            who = bb_strtou(arg, NULL, 10);
     93            if (errno) {
     94                bb_error_msg("bad value: %s", arg);
    10595                goto HAD_ERROR;
    10696            }
     
    114104            old_priority = getpriority(which, who);
    115105            if (errno) {
    116                 bb_perror_msg(Xetpriority_msg, who, 'g');
     106                bb_perror_msg(Xetpriority_msg, 'g');
    117107                goto HAD_ERROR;
    118108            }
    119109
    120             new_priority = int_add_no_wrap(old_priority, adjustment);
     110            new_priority = old_priority + adjustment;
    121111        } else {
    122112            new_priority = adjustment;
     
    127117        }
    128118
    129         bb_perror_msg(Xetpriority_msg, who, 's');
    130     HAD_ERROR:
     119        bb_perror_msg(Xetpriority_msg, 's');
     120 HAD_ERROR:
    131121        retval = EXIT_FAILURE;
    132122    }
Note: See TracChangeset for help on using the changeset viewer.