Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/coreutils/sleep.c
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/coreutils/sleep.c
r1765 r2725 5 5 * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> 6 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 8 */ 9 9 … … 21 21 #include "libbb.h" 22 22 23 /* This is a NOFORK applet. Be very careful!*/23 /* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells */ 24 24 25 25 26 #if ENABLE_FEATURE_FANCY_SLEEP 26 #if ENABLE_FEATURE_FANCY_SLEEP || ENABLE_FEATURE_FLOAT_SLEEP 27 27 static const struct suffix_mult sfx[] = { 28 28 { "s", 1 }, … … 30 30 { "h", 60*60 }, 31 31 { "d", 24*60*60 }, 32 { }32 { "", 0 } 33 33 }; 34 34 #endif 35 35 36 int sleep_main(int argc, char **argv) ;37 int sleep_main(int argc , char **argv)36 int sleep_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 37 int sleep_main(int argc UNUSED_PARAM, char **argv) 38 38 { 39 #if ENABLE_FEATURE_FLOAT_SLEEP 40 double duration; 41 struct timespec ts; 42 #else 39 43 unsigned duration; 40 41 #if ENABLE_FEATURE_FANCY_SLEEP 42 43 if (argc < 2) { 44 bb_show_usage(); 45 } 44 #endif 46 45 47 46 ++argv; 47 if (!*argv) 48 bb_show_usage(); 49 50 #if ENABLE_FEATURE_FLOAT_SLEEP 51 52 # if ENABLE_LOCALE_SUPPORT 53 /* undo busybox.c setlocale */ 54 setlocale(LC_NUMERIC, "C"); 55 # endif 48 56 duration = 0; 49 57 do { 50 duration += xatoul_range_sfx(*argv, 0, UINT_MAX-duration, sfx); 58 char *arg = *argv; 59 if (strchr(arg, '.')) { 60 double d; 61 char *pp; 62 int len = strspn(arg, "0123456789."); 63 char sv = arg[len]; 64 arg[len] = '\0'; 65 errno = 0; 66 d = strtod(arg, &pp); 67 if (errno || *pp) 68 bb_show_usage(); 69 arg += len; 70 *arg-- = sv; 71 sv = *arg; 72 *arg = '1'; 73 duration += d * xatoul_sfx(arg, sfx); 74 *arg = sv; 75 } else { 76 duration += xatoul_sfx(arg, sfx); 77 } 51 78 } while (*++argv); 52 79 53 #else /* FEATURE_FANCY_SLEEP */ 80 ts.tv_sec = MAXINT(typeof(ts.tv_sec)); 81 ts.tv_nsec = 0; 82 if (duration >= 0 && duration < ts.tv_sec) { 83 ts.tv_sec = duration; 84 ts.tv_nsec = (duration - ts.tv_sec) * 1000000000; 85 } 86 do { 87 errno = 0; 88 nanosleep(&ts, &ts); 89 } while (errno == EINTR); 54 90 55 if (argc != 2) { 56 bb_show_usage(); 57 } 91 #elif ENABLE_FEATURE_FANCY_SLEEP 58 92 59 duration = xatou(argv[1]); 93 duration = 0; 94 do { 95 duration += xatou_range_sfx(*argv, 0, UINT_MAX - duration, sfx); 96 } while (*++argv); 97 sleep(duration); 60 98 61 #e ndif /* FEATURE_FANCY_SLEEP*/99 #else /* simple */ 62 100 63 if (sleep(duration)) { 64 bb_perror_nomsg_and_die(); 65 } 101 duration = xatou(*argv); 102 sleep(duration); 103 // Off. If it's really needed, provide example why 104 //if (sleep(duration)) { 105 // bb_perror_nomsg_and_die(); 106 //} 107 108 #endif 66 109 67 110 return EXIT_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.