From 247d7556a32cbcdc1fadd3a32072936b786e9be5 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 16 Nov 2017 16:35:10 -0800 Subject: Add uptime -p. We (Android) give up trying to teach folks what "up 142 days, 1:45" means... Bug: http://b/65205261 --- toys/other/uptime.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/toys/other/uptime.c b/toys/other/uptime.c index 485dfee5..61aed8fb 100644 --- a/toys/other/uptime.c +++ b/toys/other/uptime.c @@ -4,18 +4,19 @@ * Copyright 2012 Luis Felipe Strano Moraes * Copyright 2013 Jeroen van Rijn -USE_UPTIME(NEWTOY(uptime, ">0s", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UPTIME(NEWTOY(uptime, ">0ps", TOYFLAG_USR|TOYFLAG_BIN)) config UPTIME bool "uptime" default y depends on TOYBOX_UTMPX help - usage: uptime [-s] + usage: uptime [-ps] Tell the current time, how long the system has been running, the number of users, and the system load averages for the past 1, 5 and 15 minutes. + -p Pretty (human-readable) uptime -s Since when has the system been up? */ @@ -44,23 +45,37 @@ void uptime_main(void) return; } - // Obtain info about logged on users - setutxent(); - while ((entry = getutxent())) if (entry->ut_type == USER_PROCESS) users++; - endutxent(); - // Current time tm = localtime(&t); - xprintf(" %02d:%02d:%02d up ", tm->tm_hour, tm->tm_min, tm->tm_sec); // Uptime info.uptime /= 60; minutes = info.uptime%60; info.uptime /= 60; hours = info.uptime%24; days = info.uptime/24; + + if (toys.optflags & FLAG_p) { + int weeks = days/7; + days %= 7; + + xprintf("up %d week%s, %d day%s, %d hour%s, %d minute%s\n", + weeks, (weeks!=1)?"s":"", + days, (days!=1)?"s":"", + hours, (hours!=1)?"s":"", + minutes, (minutes!=1)?"s":""); + return; + } + + xprintf(" %02d:%02d:%02d up ", tm->tm_hour, tm->tm_min, tm->tm_sec); if (days) xprintf("%d day%s, ", days, (days!=1)?"s":""); if (hours) xprintf("%2d:%02d, ", hours, minutes); else printf("%d min, ", minutes); + + // Obtain info about logged on users + setutxent(); + while ((entry = getutxent())) if (entry->ut_type == USER_PROCESS) users++; + endutxent(); + printf(" %d user%s, ", users, (users!=1) ? "s" : ""); printf(" load average: %.02f, %.02f, %.02f\n", info.loads[0]/65536.0, info.loads[1]/65536.0, info.loads[2]/65536.0); -- cgit v1.2.3