summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authored neville <ed@s5h.net>2021-10-14 19:37:42 +1100
committerCraig Small <csmall@dropbear.xyz>2021-10-14 19:37:42 +1100
commit0496b39876d569fe1cecb76ad5ef212cd14c0374 (patch)
tree3dd0366a52bc8fef8ab74610863b6e5f6bacb128
parent5f760d50850e6cb3d175c2e2e0c35c328eba78d7 (diff)
downloadprocps-ng-0496b39876d569fe1cecb76ad5ef212cd14c0374.tar.gz
uptime: Correctly print pretty/short format
uptime -p would show empty output after 52 weeks of uptime. This commit is largely the work of Ed but reformatted for newlib branch. Signed-off-by: Craig Small <csmall@dropbear.xyz> References: procps-ng/procps!141 procps-ng/procps#217
-rw-r--r--NEWS1
-rw-r--r--proc/uptime.c40
2 files changed, 39 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index efa44a6..5f41025 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ procps-ng-NEXT
* top: summary area memory lines can print two abreast
* top: added two new autogroup fields
* top: added long versions of command line options
+ * uptime: print short/pretty format correctly issue #217
* vmstat: add -y option to remove first line merge !72
procps-ng-3.3.17
diff --git a/proc/uptime.c b/proc/uptime.c
index 0f1fab2..39ba518 100644
--- a/proc/uptime.c
+++ b/proc/uptime.c
@@ -160,13 +160,49 @@ PROCPS_EXPORT char *procps_uptime_sprint_short(void)
if (procps_uptime(&uptime_secs, &idle_secs) < 0)
return shortbuf;
- updecades = (int) uptime_secs / (60*60*24*365*10);
+ if (uptime_secs>60*60*24*365*10) {
+ updecades = (int) uptime_secs / (60*60*24*365*10);
+ uptime_secs -= updecades*60*60*24*365*10;
+ }
+ else {
+ updecades = 0;
+ }
+ if (uptime_secs>60*60*24*365) {
+ upyears = (int) uptime_secs / (60*60*24*365);
+ uptime_secs -= upyears*60*60*24*365;
+ }
+ else {
+ upyears = 0;
+ }
+ if (uptime_secs>60*60*24*7) {
+ upweeks = (int) uptime_secs / (60*60*24*7);
+ uptime_secs -= upweeks*60*60*24*7;
+ }
+ else {
+ upweeks = 0;
+ }
+ if (uptime_secs>60*60*24) {
+ updays = (int) uptime_secs / (60*60*24);
+ uptime_secs -= updays*60*60*24;
+ }
+ else {
+ updays = 0;
+ }
+ if (uptime_secs>60*60) {
+ uphours = (int) uptime_secs / (60*60);
+ uptime_secs -= uphours*60*60;
+ }
+ if (uptime_secs>60) {
+ upminutes = (int) uptime_secs / 60;
+ uptime_secs -= upminutes*60;
+ }
+ /*updecades = (int) uptime_secs / (60*60*24*365*10);
upyears = ((int) uptime_secs / (60*60*24*365)) % 10;
upweeks = ((int) uptime_secs / (60*60*24*7)) % 52;
updays = ((int) uptime_secs / (60*60*24)) % 7;
uphours = ((int) uptime_secs / (60*60)) % 24;
upminutes = ((int) uptime_secs / (60)) % 60;
-
+*/
strcat(shortbuf, "up ");
if (updecades) {