Date: Wed, 5 Nov 2014 23:54:33 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r274151 - head/usr.bin/w Message-ID: <201411052354.sA5NsXTX072329@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Wed Nov 5 23:54:33 2014 New Revision: 274151 URL: https://svnweb.freebsd.org/changeset/base/274151 Log: Convert to use libxo. Obtained from: Phil Shafer <phil@juniper.net> Sponsored by: Juniper Networks, Inc. Modified: head/usr.bin/w/Makefile head/usr.bin/w/pr_time.c head/usr.bin/w/w.c Modified: head/usr.bin/w/Makefile ============================================================================== --- head/usr.bin/w/Makefile Wed Nov 5 23:12:39 2014 (r274150) +++ head/usr.bin/w/Makefile Wed Nov 5 23:54:33 2014 (r274151) @@ -4,8 +4,8 @@ PROG= w SRCS= fmt.c pr_time.c proc_compare.c w.c MAN= w.1 uptime.1 -DPADD= ${LIBKVM} ${LIBUTIL} -LDADD= -lkvm -lutil +DPADD= ${LIBKVM} ${LIBUTIL} ${LIBXO} +LDADD= -lkvm -lutil -lxo #BINGRP= kmem #BINMODE=2555 LINKS= ${BINDIR}/w ${BINDIR}/uptime Modified: head/usr.bin/w/pr_time.c ============================================================================== --- head/usr.bin/w/pr_time.c Wed Nov 5 23:12:39 2014 (r274150) +++ head/usr.bin/w/pr_time.c Wed Nov 5 23:54:33 2014 (r274151) @@ -41,6 +41,7 @@ static const char sccsid[] = "@(#)pr_tim #include <stdio.h> #include <string.h> #include <wchar.h> +#include <libxo/xo.h> #include "extern.h" @@ -82,12 +83,14 @@ pr_attime(time_t *started, time_t *now) (void)wcsftime(buf, sizeof(buf), fmt, &tp); len = wcslen(buf); width = wcswidth(buf, len); + xo_attr("since", "%lu", (unsigned long) *started); + xo_attr("delta", "%lu", (unsigned long) diff); if (len == width) - (void)wprintf(L"%-7.7ls", buf); + xo_emit("{:login-time/%-7.7ls/%ls}", buf); else if (width < 7) - (void)wprintf(L"%ls%.*s", buf, 7 - width, " "); + xo_emit("{:login-time/%ls}%.*s", buf, 7 - width, " "); else { - (void)wprintf(L"%ls", buf); + xo_emit("{:login-time/%ls}", buf); offset = width - 7; } return (offset); @@ -104,7 +107,7 @@ pr_idle(time_t idle) /* If idle more than 36 hours, print as a number of days. */ if (idle >= 36 * 3600) { int days = idle / 86400; - (void)printf(" %dday%s ", days, days > 1 ? "s" : " " ); + xo_emit(" {:idle/%dday%s} ", days, days > 1 ? "s" : " " ); if (days >= 100) return (2); if (days >= 10) @@ -113,15 +116,15 @@ pr_idle(time_t idle) /* If idle more than an hour, print as HH:MM. */ else if (idle >= 3600) - (void)printf(" %2d:%02d ", + xo_emit(" {:idle/%2d:%02d/} ", (int)(idle / 3600), (int)((idle % 3600) / 60)); else if (idle / 60 == 0) - (void)printf(" - "); + xo_emit(" - "); /* Else print the minutes idle. */ else - (void)printf(" %2d ", (int)(idle / 60)); + xo_emit(" {:idle/%2d} ", (int)(idle / 60)); return (0); /* not idle longer than 9 days */ } Modified: head/usr.bin/w/w.c ============================================================================== --- head/usr.bin/w/w.c Wed Nov 5 23:12:39 2014 (r274150) +++ head/usr.bin/w/w.c Wed Nov 5 23:54:33 2014 (r274151) @@ -83,6 +83,7 @@ static const char sccsid[] = "@(#)w.c 8. #include <unistd.h> #include <utmpx.h> #include <vis.h> +#include <libxo/xo.h> #include "extern.h" @@ -133,7 +134,7 @@ main(int argc, char *argv[]) struct stat *stp; time_t touched; int ch, i, nentries, nusers, wcmd, longidle, longattime, dropgid; - const char *memf, *nlistf, *p; + const char *memf, *nlistf, *p, *save_p; char *x_suffix; char buf[MAXHOSTNAMELEN], errbuf[_POSIX2_LINE_MAX]; char fn[MAXHOSTNAMELEN]; @@ -143,6 +144,10 @@ main(int argc, char *argv[]) use_ampm = (*nl_langinfo(T_FMT_AMPM) != '\0'); use_comma = (*nl_langinfo(RADIXCHAR) != ','); + argc = xo_parse_args(argc, argv); + if (argc < 0) + exit(1); + /* Are we w(1) or uptime(1)? */ if (strcmp(basename(argv[0]), "uptime") == 0) { wcmd = 0; @@ -254,9 +259,12 @@ main(int argc, char *argv[]) } endutxent(); + xo_open_container("uptime-information"); + if (header || wcmd == 0) { pr_header(&now, nusers); if (wcmd == 0) { + xo_close_container("uptime-information"); (void)kvm_close(kd); exit(0); } @@ -268,7 +276,7 @@ main(int argc, char *argv[]) #define HEADER_WHAT "WHAT\n" #define WUSED (W_DISPUSERSIZE + W_DISPLINESIZE + W_DISPHOSTSIZE + \ sizeof(HEADER_LOGIN_IDLE) + 3) /* header width incl. spaces */ - (void)printf("%-*.*s %-*.*s %-*.*s %s", + xo_emit("{T:/%-*.*s} {T:/%-*.*s} {T:/%-*.*s} {T:/%s}", W_DISPUSERSIZE, W_DISPUSERSIZE, HEADER_USER, W_DISPLINESIZE, W_DISPLINESIZE, HEADER_TTY, W_DISPHOSTSIZE, W_DISPHOSTSIZE, HEADER_FROM, @@ -342,6 +350,9 @@ main(int argc, char *argv[]) } } + xo_open_container("user-table"); + xo_open_list("user-entry"); + for (ep = ehead; ep != NULL; ep = ep->next) { struct addrinfo hints, *res; struct sockaddr_storage ss; @@ -351,7 +362,9 @@ main(int argc, char *argv[]) time_t t; int isaddr; - p = *ep->utmp.ut_host ? ep->utmp.ut_host : "-"; + xo_open_instance("user-entry"); + + save_p = p = *ep->utmp.ut_host ? ep->utmp.ut_host : "-"; if ((x_suffix = strrchr(p, ':')) != NULL) { if ((dot = strchr(x_suffix, '.')) != NULL && strchr(dot+1, '.') == NULL) @@ -400,6 +413,9 @@ main(int argc, char *argv[]) p = buf; } if (dflag) { + xo_open_container("process-table"); + xo_open_list("process-entry"); + for (dkp = ep->dkp; dkp != NULL; dkp = debugproc(dkp)) { const char *ptr; @@ -407,24 +423,41 @@ main(int argc, char *argv[]) dkp->ki_comm, NULL, MAXCOMLEN); if (ptr == NULL) ptr = "-"; - (void)printf("\t\t%-9d %s\n", + xo_open_instance("process-entry"); + xo_emit("\t\t{:process-id/%-9d/%d} {:command/%s}\n", dkp->ki_pid, ptr); + xo_close_instance("process-entry"); } + xo_close_list("process-entry"); + xo_close_container("process-table"); } - (void)printf("%-*.*s %-*.*s %-*.*s ", - W_DISPUSERSIZE, W_DISPUSERSIZE, ep->utmp.ut_user, - W_DISPLINESIZE, W_DISPLINESIZE, - *ep->utmp.ut_line ? - (strncmp(ep->utmp.ut_line, "tty", 3) && - strncmp(ep->utmp.ut_line, "cua", 3) ? - ep->utmp.ut_line : ep->utmp.ut_line + 3) : "-", + xo_emit("{:user/%-*.*s/%@**@s} {:tty/%-*.*s/%@**@s} ", + W_DISPUSERSIZE, W_DISPUSERSIZE, ep->utmp.ut_user, + W_DISPLINESIZE, W_DISPLINESIZE, + *ep->utmp.ut_line ? + (strncmp(ep->utmp.ut_line, "tty", 3) && + strncmp(ep->utmp.ut_line, "cua", 3) ? + ep->utmp.ut_line : ep->utmp.ut_line + 3) : "-"); + + if (save_p && save_p != p) + xo_attr("address", "%s", save_p); + xo_emit("{:from/%-*.*s/%@**@s} ", W_DISPHOSTSIZE, W_DISPHOSTSIZE, *p ? p : "-"); t = ep->utmp.ut_tv.tv_sec; longattime = pr_attime(&t, &now); longidle = pr_idle(ep->idle); - (void)printf("%.*s\n", argwidth - longidle - longattime, + xo_emit("{:command/%.*s/%@*@s}\n", + argwidth - longidle - longattime, ep->args); + + xo_close_instance("user-entry"); } + + xo_close_list("user-entry"); + xo_close_container("user-table"); + xo_close_container("uptime-information"); + xo_finish(); + (void)kvm_close(kd); exit(0); } @@ -443,7 +476,7 @@ pr_header(time_t *nowp, int nusers) */ if (strftime(buf, sizeof(buf), use_ampm ? "%l:%M%p" : "%k:%M", localtime(nowp)) != 0) - (void)printf("%s ", buf); + xo_emit("{:time-of-day/%s} ", buf); /* * Print how long system has been up. */ @@ -457,35 +490,45 @@ pr_header(time_t *nowp, int nusers) uptime %= 3600; mins = uptime / 60; secs = uptime % 60; - (void)printf(" up"); + xo_emit(" up"); + xo_attr("seconds", "%lu", (unsigned long) tp.tv_sec); if (days > 0) - (void)printf(" %d day%s,", days, days > 1 ? "s" : ""); + xo_emit(" {:uptime/%d day%s},", + days, days > 1 ? "s" : ""); if (hrs > 0 && mins > 0) - (void)printf(" %2d:%02d,", hrs, mins); + xo_emit(" {:uptime/%2d:%02d},", hrs, mins); else if (hrs > 0) - (void)printf(" %d hr%s,", hrs, hrs > 1 ? "s" : ""); + xo_emit(" {:uptime/%d hr%s},", + hrs, hrs > 1 ? "s" : ""); else if (mins > 0) - (void)printf(" %d min%s,", mins, mins > 1 ? "s" : ""); + xo_emit(" {:uptime/%d min%s},", + mins, mins > 1 ? "s" : ""); else - (void)printf(" %d sec%s,", secs, secs > 1 ? "s" : ""); + xo_emit(" {:uptime/%d sec%s},", + secs, secs > 1 ? "s" : ""); } /* Print number of users logged in to system */ - (void)printf(" %d user%s", nusers, nusers == 1 ? "" : "s"); + xo_emit(" {:users/%d} user%s", nusers, nusers == 1 ? "" : "s"); /* * Print 1, 5, and 15 minute load averages. */ if (getloadavg(avenrun, sizeof(avenrun) / sizeof(avenrun[0])) == -1) - (void)printf(", no load average information available\n"); + xo_emit(", no load average information available\n"); else { - (void)printf(", load averages:"); + static const char *format[] = { + " {:load-average-1/%.2f}", + " {:load-average-5/%.2f}", + " {:load-average-15/%.2f}", + }; + xo_emit(", load averages:"); for (i = 0; i < (int)(sizeof(avenrun) / sizeof(avenrun[0])); i++) { if (use_comma && i > 0) - (void)printf(","); - (void)printf(" %.2f", avenrun[i]); + xo_emit(","); + xo_emit(format[i], avenrun[i]); } - (void)printf("\n"); + xo_emit("\n"); } } @@ -506,9 +549,8 @@ static void usage(int wcmd) { if (wcmd) - (void)fprintf(stderr, - "usage: w [-dhin] [-M core] [-N system] [user ...]\n"); + xo_error("usage: w [-dhin] [-M core] [-N system] [user ...]\n"); else - (void)fprintf(stderr, "usage: uptime\n"); + xo_error("usage: uptime\n"); exit(1); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411052354.sA5NsXTX072329>