Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 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/coreutils/nice.c

    r821 r1765  
    55 * Copyright (C) 2005  Manuel Novoa III  <mjn3@codepoet.org>
    66 *
    7  * This program is free software; you can redistribute it and/or modify
    8  * it under the terms of the GNU General Public License as published by
    9  * the Free Software Foundation; either version 2 of the License, or
    10  * (at your option) any later version.
    11  *
    12  * This program is distributed in the hope that it will be useful,
    13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    15  * General Public License for more details.
    16  *
    17  * You should have received a copy of the GNU General Public License
    18  * along with this program; if not, write to the Free Software
    19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    20  *
     7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
    218 */
    229
    23 #include <stdio.h>
    24 #include <stdlib.h>
    25 #include <string.h>
    26 #include <limits.h>
    27 #include <errno.h>
    28 #include <unistd.h>
    2910#include <sys/resource.h>
    30 #include "busybox.h"
     11#include "libbb.h"
    3112
    32 static inline int int_add_no_wrap(int a, int b)
    33 {
    34     int s = a + b;
    35 
    36     if (b < 0) {
    37         if (s > a) s = INT_MIN;
    38     } else {
    39         if (s < a) s = INT_MAX;
    40     }
    41 
    42     return s;
    43 }
    44 
     13int nice_main(int argc, char **argv);
    4514int nice_main(int argc, char **argv)
    4615{
    47     static const char Xetpriority_msg[] = "cannot %cet priority";
    48 
    4916    int old_priority, adjustment;
    5017
    51     errno = 0;           /* Needed for getpriority error detection. */
    5218    old_priority = getpriority(PRIO_PROCESS, 0);
    53     if (errno) {
    54         bb_perror_msg_and_die(Xetpriority_msg, 'g');
    55     }
    5619
    5720    if (!*++argv) { /* No args, so (GNU) output current nice value. */
    58         bb_printf("%d\n", old_priority);
    59         bb_fflush_stdout_and_exit(EXIT_SUCCESS);
     21        printf("%d\n", old_priority);
     22        fflush_stdout_and_exit(EXIT_SUCCESS);
    6023    }
    6124
    6225    adjustment = 10;            /* Set default adjustment. */
    6326
    64     if ((argv[0][0] == '-') && (argv[0][1] == 'n') && !argv[0][2]) { /* "-n" */
     27    if (argv[0][0] == '-') {
     28        if (argv[0][1] == 'n') { /* -n */
     29            if (argv[0][2]) { /* -nNNNN (w/o space) */
     30                argv[0] += 2; argv--; argc++;
     31            }
     32        } else { /* -NNN (NNN may be negative) == -n NNN */
     33            argv[0] += 1; argv--; argc++;
     34        }
    6535        if (argc < 4) {         /* Missing priority and/or utility! */
    6636            bb_show_usage();
    6737        }
    68         adjustment = bb_xgetlarg(argv[1], 10, INT_MIN, INT_MAX);
     38        adjustment = xatoi_range(argv[1], INT_MIN/2, INT_MAX/2);
    6939        argv += 2;
    7040    }
    7141
    72     {  /* Set our priority.  Handle integer wrapping for old + adjust. */
    73         int new_priority = int_add_no_wrap(old_priority, adjustment);
     42    {  /* Set our priority. */
     43        int prio = old_priority + adjustment;
    7444
    75         if (setpriority(PRIO_PROCESS, 0, new_priority) < 0) {
    76             bb_perror_msg_and_die(Xetpriority_msg, 's');
     45        if (setpriority(PRIO_PROCESS, 0, prio) < 0) {
     46            bb_perror_msg_and_die("setpriority(%d)", prio);
    7747        }
    7848    }
    7949
    80     execvp(*argv, argv);        /* Now exec the desired program. */
     50    BB_EXECVP(*argv, argv);     /* Now exec the desired program. */
    8151
    8252    /* The exec failed... */
    83     bb_default_error_retval = (errno == ENOENT) ? 127 : 126; /* SUSv3 */
     53    xfunc_error_retval = (errno == ENOENT) ? 127 : 126; /* SUSv3 */
    8454    bb_perror_msg_and_die("%s", *argv);
    8555}
Note: See TracChangeset for help on using the changeset viewer.