[Toybox] [PATCH] uptime.c: Add user count and format according to upstream
Jeroen van Rijn
jvrnix at gmail.com
Sat Oct 12 16:14:58 PDT 2013
I noticed the user count was missing and added this, borrowing a bit
of code from toys/posix/who.c. The original toy also omitted commas
between the load values, as compared to upstream.
Output now includes user count and follows the same format:
$ ./toybox uptime
00:49:04 up 3 days, 8:00, 2 users, load average: 0,07, 0,15, 0,34
$ uptime
00:49:07 up 3 days, 8:00, 2 users, load average: 0,06, 0,15, 0,34
CC: Elie De Brauwer <eliedebrauwer at gmail.com>
CC: Luis Felipe Strano Moraes <lfelipe at profusion.mobi>
Signed-off-by: Jeroen van Rijn <jvrnix at gmail.com>
---
toys/other/uptime.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/toys/other/uptime.c b/toys/other/uptime.c
index f4ce5e4..d20af53 100644
--- a/toys/other/uptime.c
+++ b/toys/other/uptime.c
@@ -1,6 +1,10 @@
/* uptime.c - Tell how long the system has been running.
*
* Copyright 2012 Elie De Brauwer <eliedebrauwer at gmail.com>
+ * Copyright 2012 Luis Felipe Strano Moraes <lfelipe at profusion.mobi>
+ * (code borrowed from toys/posix/who.c for user count)
+ * Copyright 2013 Jeroen van Rijn <jvrnix at gmail.com>
+
USE_UPTIME(NEWTOY(uptime, NULL, TOYFLAG_USR|TOYFLAG_BIN))
@@ -22,11 +26,20 @@ void uptime_main(void)
time_t tmptime;
struct tm * now;
unsigned int days, hours, minutes;
+ struct utmpx *entry;
+ int users = 0;
// Obtain the data we need.
sysinfo(&info);
time(&tmptime);
now = localtime(&tmptime);
+ // Obtain info about logged on users
+ setutxent();
+ while ((entry = getutxent()))
+ {
+ if (entry->ut_type == USER_PROCESS) users++;
+ }
+ endutxent();
// Time
xprintf(" %02d:%02d:%02d up ", now->tm_hour, now->tm_min, now->tm_sec);
@@ -39,7 +52,7 @@ void uptime_main(void)
if (days) xprintf("%d day%s, ", days, (days!=1)?"s":"");
if (hours) xprintf("%2d:%02d, ", hours, minutes);
else printf("%d min, ", minutes);
-
- printf(" load average: %.02f %.02f %.02f\n", info.loads[0]/65536.0,
+ 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);
}
--
1.8.1.2
More information about the Toybox
mailing list