summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/top/display.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/contrib/top/display.c b/contrib/top/display.c
index 6b3a5f4..bb3be21 100644
--- a/contrib/top/display.c
+++ b/contrib/top/display.c
@@ -29,6 +29,9 @@
#include "os.h"
#include <ctype.h>
#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
#include "screen.h" /* interface to screen package */
#include "layout.h" /* defines for screen position layout */
@@ -240,11 +243,51 @@ double *avenrun;
}
}
+struct timeval boottime;
+time_t now;
+time_t uptime;
+
i_timeofday(tod)
time_t *tod;
{
+ int days, hrs, i, mins, secs;
+ int mib[2];
+ size_t size;
+
+ (void)time(&now);
+
+ /*
+ * Print how long system has been up.
+ * (Found by looking getting "boottime" from the kernel)
+ */
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_BOOTTIME;
+ size = sizeof(boottime);
+ if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 &&
+ boottime.tv_sec != 0) {
+ uptime = now - boottime.tv_sec;
+ uptime += 30;
+ days = uptime / 86400;
+ uptime %= 86400;
+ hrs = uptime / 3600;
+ uptime %= 3600;
+ mins = uptime / 60;
+ secs = uptime % 60;
+
+ if (smart_terminal)
+ {
+ Move_to((screen_width - 24) - (days > 9 ? 1 : 0), 0);
+ }
+ else
+ {
+ fputs(" ", stdout);
+ }
+
+ printf(" up %d+%02d:%02d:%02d", days, hrs, mins, secs);
+ }
+
/*
* Display the current time.
* "ctime" always returns a string that looks like this:
OpenPOWER on IntegriCloud