changeset 1095:960462460639 draft

I noticed the user count was missing and added this, borrowing a bit of code from toys/posix/who.c.
author Jeroen van Rijn <jvrnix@gmail.com>
date Sat, 26 Oct 2013 12:59:28 -0500
parents 370f15d1ece1
children 580a0300b68f
files toys/other/uptime.c
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/toys/other/uptime.c	Wed Oct 23 02:52:01 2013 -0500
+++ b/toys/other/uptime.c	Sat Oct 26 12:59:28 2013 -0500
@@ -1,6 +1,9 @@
 /* uptime.c - Tell how long the system has been running.
  *
  * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
+ * Copyright 2012 Luis Felipe Strano Moraes <lfelipe@profusion.mobi>
+ * Copyright 2013 Jeroen van Rijn <jvrnix@gmail.com>
+
 
 USE_UPTIME(NEWTOY(uptime, NULL, TOYFLAG_USR|TOYFLAG_BIN))
 
@@ -22,11 +25,17 @@
   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 +48,7 @@
   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);
 }