Also add trivial tests.
---
 tests/uptime.test   | 10 ++++++++++
 toys/other/uptime.c | 32 ++++++++++++++++++++++----------
 2 files changed, 32 insertions(+), 10 deletions(-)
 create mode 100644 tests/uptime.test
From 3fef24c5092fa1d3819fa39f6b8b4b7086c60b0e Mon Sep 17 00:00:00 2001
From: Elliott Hughes <e...@google.com>
Date: Mon, 20 Mar 2017 17:56:12 -0700
Subject: [PATCH] Implement uptime -s.

Also add trivial tests.
---
 tests/uptime.test   | 10 ++++++++++
 toys/other/uptime.c | 32 ++++++++++++++++++++++----------
 2 files changed, 32 insertions(+), 10 deletions(-)
 create mode 100644 tests/uptime.test

diff --git a/tests/uptime.test b/tests/uptime.test
new file mode 100644
index 0000000..df65cd0
--- /dev/null
+++ b/tests/uptime.test
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ -f testing.sh ] && . testing.sh
+
+#testing "name" "command" "result" "infile" "stdin"
+
+testing "uptime" "uptime | grep -q 'load average:' && echo t" "t\n" "" ""
+testing "uptime -s" \
+        "uptime -s | grep -q '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]$' && echo t" \
+        "t\n" "" ""
diff --git a/toys/other/uptime.c b/toys/other/uptime.c
index 91887df..dc3c2df 100644
--- a/toys/other/uptime.c
+++ b/toys/other/uptime.c
@@ -5,42 +5,54 @@
  * Copyright 2013 Jeroen van Rijn <jvr...@gmail.com>
 
 
-USE_UPTIME(NEWTOY(uptime, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_UPTIME(NEWTOY(uptime, ">0s", TOYFLAG_USR|TOYFLAG_BIN))
 
 config UPTIME
   bool "uptime"
   default y
   depends on TOYBOX_UTMPX
   help
-    usage: uptime
+    usage: uptime [-s]
 
-    Tell how long the system has been running and the system load
-    averages for the past 1, 5 and 15 minutes.
+    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.
+
+    -s	Since when has the system been up?
 */
 
+#define FOR_uptime
 #include "toys.h"
 
 void uptime_main(void)
 {
   struct sysinfo info;
-  time_t tmptime;
-  struct tm * now;
+  time_t t;
+  struct tm *tm;
   unsigned int days, hours, minutes;
   struct utmpx *entry;
   int users = 0;
 
   // Obtain the data we need.
   sysinfo(&info);
-  time(&tmptime);
-  now = localtime(&tmptime);
+  time(&t);
+
+  // Just show the time of boot?
+  if (toys.optflags & FLAG_s) {
+    t -= info.uptime;
+    tm = localtime(&t);
+    strftime(toybuf, sizeof(toybuf), "%F %T", tm);
+    xputs(toybuf);
+    return;
+  }
 
   // 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);
+  // 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;
-- 
2.12.0.367.g23dc2f6d3c-goog

_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to