uptime: add -s support
No binary (build failed)
—
(log yok)
| @@ -45,7 +45,6 @@ | |
| # include <sys/sysinfo.h> | |
| #endif | |
| - | |
| #ifndef FSHIFT | |
| # define FSHIFT 16 /* nr of bits of precision */ | |
| #endif | |
| @@ -53,29 +52,48 @@ | |
| #define LOAD_INT(x) (unsigned)((x) >> FSHIFT) | |
| #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1 - 1)) * 100) | |
| - | |
| int uptime_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |
| int uptime_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | |
| { | |
| unsigned updays, uphours, upminutes; | |
| + | unsigned opts; |
| struct sysinfo info; | |
| struct tm *current_time; | |
| time_t current_secs; | |
| + | opts = getopt32(argv, "s"); |
| + | |
| time(¤t_secs); | |
| + | sysinfo(&info); |
| + | |
| + | if (opts) // -s |
| + | current_secs -= info.uptime; |
| + | |
| current_time = localtime(¤t_secs); | |
| - | sysinfo(&info); |
| + | if (opts) { // -s |
| + | printf("%04u-%02u-%02u %02u:%02u:%02u\n", |
| + | current_time->tm_year + 1900, current_time->tm_mon + 1, current_time->tm_mday, |
| + | current_time->tm_hour, current_time->tm_min, current_time->tm_sec |
| + | ); |
| + | /* The above way of calculating boot time is wobbly, |
| + | * info.uptime has only 1 second precision, which makes |
| + | * "uptime -s" wander +- one second. |
| + | * /proc/uptime may be better, it has 0.01s precision. |
| + | */ |
| + | return EXIT_SUCCESS; |
| + | } |
| printf(" %02u:%02u:%02u up ", | |
| - | current_time->tm_hour, current_time->tm_min, current_time->tm_sec); |
| + | current_time->tm_hour, current_time->tm_min, current_time->tm_sec |
| + | ); |
| updays = (unsigned) info.uptime / (unsigned)(60*60*24); | |
| - | if (updays) |
| + | if (updays != 0) |
| printf("%u day%s, ", updays, (updays != 1) ? "s" : ""); | |
| upminutes = (unsigned) info.uptime / (unsigned)60; | |
| uphours = (upminutes / (unsigned)60) % (unsigned)24; | |
| upminutes %= 60; | |
| - | if (uphours) |
| + | if (uphours != 0) |
| printf("%2u:%02u", uphours, upminutes); | |
| else | |
| printf("%u min", upminutes); | |