move help text from include/usage.src.h to coreutils/*.c
[oweals/busybox.git] / coreutils / nice.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * nice implementation for busybox
4  *
5  * Copyright (C) 2005  Manuel Novoa III  <mjn3@codepoet.org>
6  *
7  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8  */
9
10 //usage:#define nice_trivial_usage
11 //usage:       "[-n ADJUST] [PROG ARGS]"
12 //usage:#define nice_full_usage "\n\n"
13 //usage:       "Change scheduling priority, run PROG\n"
14 //usage:     "\nOptions:"
15 //usage:     "\n        -n ADJUST       Adjust priority by ADJUST"
16
17 #include <sys/resource.h>
18 #include "libbb.h"
19
20 int nice_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
21 int nice_main(int argc, char **argv)
22 {
23         int old_priority, adjustment;
24
25         old_priority = getpriority(PRIO_PROCESS, 0);
26
27         if (!*++argv) { /* No args, so (GNU) output current nice value. */
28                 printf("%d\n", old_priority);
29                 fflush_stdout_and_exit(EXIT_SUCCESS);
30         }
31
32         adjustment = 10;  /* Set default adjustment. */
33
34         if (argv[0][0] == '-') {
35                 if (argv[0][1] == 'n') { /* -n */
36                         if (argv[0][2]) { /* -nNNNN (w/o space) */
37                                 argv[0] += 2; argv--; argc++;
38                         }
39                 } else { /* -NNN (NNN may be negative) == -n NNN */
40                         argv[0] += 1; argv--; argc++;
41                 }
42                 if (argc < 4) {  /* Missing priority and/or utility! */
43                         bb_show_usage();
44                 }
45                 adjustment = xatoi_range(argv[1], INT_MIN/2, INT_MAX/2);
46                 argv += 2;
47         }
48
49         {  /* Set our priority. */
50                 int prio = old_priority + adjustment;
51
52                 if (setpriority(PRIO_PROCESS, 0, prio) < 0) {
53                         bb_perror_msg_and_die("setpriority(%d)", prio);
54                 }
55         }
56
57         BB_EXECVP_or_die(argv);
58 }