svn commit: r281625 - head/usr.bin/w
Allan Jude
allanjude at FreeBSD.org
Thu Apr 16 22:09:39 UTC 2015
Author: allanjude (doc committer)
Date: Thu Apr 16 22:09:37 2015
New Revision: 281625
URL: https://svnweb.freebsd.org/changeset/base/281625
Log:
Fix libxo output from uptime command
the libxo output for uptime returned multiple 'uptime' keys, one each for number of days, hours, and minutes of uptime.
This is invalid JSON.
This patch makes the output the raw number of seconds, as well as adding keys for the individual unit values
A string of the original output from the plain-text uptime command is also added
Differential Revision: https://reviews.freebsd.org/D2063
Reviewed by: jmg
Approved by: marcel
Sponsored by: ScaleEngine Inc.
Modified:
head/usr.bin/w/Makefile
head/usr.bin/w/w.c
Modified: head/usr.bin/w/Makefile
==============================================================================
--- head/usr.bin/w/Makefile Thu Apr 16 22:06:48 2015 (r281624)
+++ head/usr.bin/w/Makefile Thu Apr 16 22:09:37 2015 (r281625)
@@ -4,7 +4,7 @@
PROG= w
SRCS= fmt.c pr_time.c proc_compare.c w.c
MAN= w.1 uptime.1
-LIBADD= kvm util xo
+LIBADD= kvm sbuf util xo
#BINGRP= kmem
#BINMODE=2555
LINKS= ${BINDIR}/w ${BINDIR}/uptime
Modified: head/usr.bin/w/w.c
==============================================================================
--- head/usr.bin/w/w.c Thu Apr 16 22:06:48 2015 (r281624)
+++ head/usr.bin/w/w.c Thu Apr 16 22:09:37 2015 (r281625)
@@ -54,8 +54,10 @@ static const char sccsid[] = "@(#)w.c 8.
#include <sys/proc.h>
#include <sys/user.h>
#include <sys/ioctl.h>
+#include <sys/sbuf.h>
#include <sys/socket.h>
#include <sys/tty.h>
+#include <sys/types.h>
#include <machine/cpu.h>
#include <netinet/in.h>
@@ -472,7 +474,9 @@ pr_header(time_t *nowp, int nusers)
struct timespec tp;
int days, hrs, i, mins, secs;
char buf[256];
+ struct sbuf *upbuf;
+ upbuf = sbuf_new_auto();
/*
* Print time of day.
*/
@@ -493,21 +497,27 @@ pr_header(time_t *nowp, int nusers)
mins = uptime / 60;
secs = uptime % 60;
xo_emit(" up");
- xo_attr("seconds", "%lu", (unsigned long) tp.tv_sec);
+ xo_emit("{e:uptime/%lu}", (unsigned long) tp.tv_sec);
+ xo_emit("{e:days/%d}{e:hours/%d}{e:minutes/%d}{e:seconds/%d}", days, hrs, mins, secs);
+
if (days > 0)
- xo_emit(" {:uptime/%d day%s},",
+ sbuf_printf(upbuf, " %d day%s,",
days, days > 1 ? "s" : "");
if (hrs > 0 && mins > 0)
- xo_emit(" {:uptime/%2d:%02d},", hrs, mins);
+ sbuf_printf(upbuf, " %2d:%02d,", hrs, mins);
else if (hrs > 0)
- xo_emit(" {:uptime/%d hr%s},",
+ sbuf_printf(upbuf, " %d hr%s,",
hrs, hrs > 1 ? "s" : "");
else if (mins > 0)
- xo_emit(" {:uptime/%d min%s},",
+ sbuf_printf(upbuf, " %d min%s,",
mins, mins > 1 ? "s" : "");
- else
- xo_emit(" {:uptime/%d sec%s},",
+ else
+ sbuf_printf(upbuf, " %d sec%s,",
secs, secs > 1 ? "s" : "");
+ if (sbuf_finish(upbuf) != 0)
+ xo_err(1, "Could not generate output");
+ xo_emit("{:uptime-human/%s}", sbuf_data(upbuf));
+ sbuf_delete(upbuf);
}
/* Print number of users logged in to system */
More information about the svn-src-head
mailing list