[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


 1381619698.0


More information about the Toybox mailing list