svn commit: r274213 - head/bin/df

Marcel Moolenaar marcel at FreeBSD.org
Fri Nov 7 03:03:27 UTC 2014


Author: marcel
Date: Fri Nov  7 03:03:25 2014
New Revision: 274213
URL: https://svnweb.freebsd.org/changeset/base/274213

Log:
  Convert to use libxo.
  
  Obtained from:  Phil Shafer <phil at juniper.net>
  Sponsored by:   Juniper Networks, Inc.

Modified:
  head/bin/df/Makefile
  head/bin/df/df.c

Modified: head/bin/df/Makefile
==============================================================================
--- head/bin/df/Makefile	Fri Nov  7 02:04:48 2014	(r274212)
+++ head/bin/df/Makefile	Fri Nov  7 03:03:25 2014	(r274213)
@@ -9,7 +9,7 @@ SRCS=	df.c vfslist.c
 
 CFLAGS+= -I${MOUNT}
 
-DPADD=	${LIBUTIL}
-LDADD=	-lutil
+DPADD=	${LIBUTIL} ${LIBXO}
+LDADD=	-lutil -lxo
 
 .include <bsd.prog.mk>

Modified: head/bin/df/df.c
==============================================================================
--- head/bin/df/df.c	Fri Nov  7 02:04:48 2014	(r274212)
+++ head/bin/df/df.c	Fri Nov  7 03:03:25 2014	(r274213)
@@ -60,6 +60,7 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <sysexits.h>
 #include <unistd.h>
+#include <libxo/xo.h>
 
 #include "extern.h"
 
@@ -82,7 +83,7 @@ static char	 *getmntpt(const char *);
 static int	  int64width(int64_t);
 static char	 *makenetvfslist(void);
 static void	  prthuman(const struct statfs *, int64_t);
-static void	  prthumanval(int64_t);
+static void	  prthumanval(const char *, int64_t);
 static intmax_t	  fsbtoblk(int64_t, uint64_t, u_long);
 static void	  prtstat(struct statfs *, struct maxwidths *);
 static size_t	  regetmntinfo(struct statfs **, long, const char **);
@@ -119,6 +120,11 @@ main(int argc, char *argv[])
 	totalbuf.f_bsize = DEV_BSIZE;
 	strlcpy(totalbuf.f_mntfromname, "total", MNAMELEN);
 	vfslist = NULL;
+
+	argc = xo_parse_args(argc, argv);
+	if (argc < 0)
+		exit(1);
+
 	while ((ch = getopt(argc, argv, "abcgHhiklmnPt:T,")) != -1)
 		switch (ch) {
 		case 'a':
@@ -161,7 +167,7 @@ main(int argc, char *argv[])
 			break;
 		case 'l':
 			if (vfslist != NULL)
-				errx(1, "-l and -t are mutually exclusive.");
+				xo_errx(1, "-l and -t are mutually exclusive.");
 			vfslist = makevfslist(makenetvfslist());
 			lflag = 1;
 			break;
@@ -174,9 +180,9 @@ main(int argc, char *argv[])
 			break;
 		case 't':
 			if (lflag)
-				errx(1, "-l and -t are mutually exclusive.");
+				xo_errx(1, "-l and -t are mutually exclusive.");
 			if (vfslist != NULL)
-				errx(1, "only one -t option may be specified");
+				xo_errx(1, "only one -t option may be specified");
 			fstype = optarg;
 			vfslist = makevfslist(optarg);
 			break;
@@ -202,16 +208,19 @@ main(int argc, char *argv[])
 		/* just the filesystems specified on the command line */
 		mntbuf = malloc(argc * sizeof(*mntbuf));
 		if (mntbuf == NULL)
-			err(1, "malloc()");
+			xo_err(1, "malloc()");
 		mntsize = 0;
 		/* continued in for loop below */
 	}
 
+	xo_open_container("storage-system-information");
+	xo_open_list("filesystem");
+
 	/* iterate through specified filesystems */
 	for (; *argv; argv++) {
 		if (stat(*argv, &stbuf) < 0) {
 			if ((mntpt = getmntpt(*argv)) == NULL) {
-				warn("%s", *argv);
+				xo_warn("%s", *argv);
 				rv = 1;
 				continue;
 			}
@@ -220,20 +229,20 @@ main(int argc, char *argv[])
 				mdev.fspec = *argv;
 				mntpath = strdup("/tmp/df.XXXXXX");
 				if (mntpath == NULL) {
-					warn("strdup failed");
+					xo_warn("strdup failed");
 					rv = 1;
 					continue;
 				}
 				mntpt = mkdtemp(mntpath);
 				if (mntpt == NULL) {
-					warn("mkdtemp(\"%s\") failed", mntpath);
+					xo_warn("mkdtemp(\"%s\") failed", mntpath);
 					rv = 1;
 					free(mntpath);
 					continue;
 				}
 				if (mount(fstype, mntpt, MNT_RDONLY,
 				    &mdev) != 0) {
-					warn("%s", *argv);
+					xo_warn("%s", *argv);
 					rv = 1;
 					(void)rmdir(mntpt);
 					free(mntpath);
@@ -244,7 +253,7 @@ main(int argc, char *argv[])
 					if (cflag)
 						addstat(&totalbuf, &statfsbuf);
 				} else {
-					warn("%s", *argv);
+					xo_warn("%s", *argv);
 					rv = 1;
 				}
 				(void)unmount(mntpt, 0);
@@ -260,7 +269,7 @@ main(int argc, char *argv[])
 		 * implement nflag here.
 		 */
 		if (statfs(mntpt, &statfsbuf) < 0) {
-			warn("%s", mntpt);
+			xo_warn("%s", mntpt);
 			rv = 1;
 			continue;
 		}
@@ -294,8 +303,14 @@ main(int argc, char *argv[])
 	for (i = 0; i < mntsize; i++)
 		if (aflag || (mntbuf[i].f_flags & MNT_IGNORE) == 0)
 			prtstat(&mntbuf[i], &maxwidths);
+
+	xo_close_list("filesystem");
+
 	if (cflag)
 		prtstat(&totalbuf, &maxwidths);
+
+	xo_close_container("storage-system-information");
+	xo_finish();
 	return (rv);
 }
 
@@ -341,7 +356,7 @@ regetmntinfo(struct statfs **mntbufp, lo
 		if (nflag || error < 0)
 			if (i != j) {
 				if (error < 0)
-					warnx("%s stats possibly stale",
+					xo_warnx("%s stats possibly stale",
 					    mntbuf[i].f_mntonname);
 				mntbuf[j] = mntbuf[i];
 			}
@@ -354,13 +369,13 @@ static void
 prthuman(const struct statfs *sfsp, int64_t used)
 {
 
-	prthumanval(sfsp->f_blocks * sfsp->f_bsize);
-	prthumanval(used * sfsp->f_bsize);
-	prthumanval(sfsp->f_bavail * sfsp->f_bsize);
+	prthumanval("  {:blocks/%6s}", sfsp->f_blocks * sfsp->f_bsize);
+	prthumanval("  {:used/%6s}", used * sfsp->f_bsize);
+	prthumanval("  {:available/%6s}", sfsp->f_bavail * sfsp->f_bsize);
 }
 
 static void
-prthumanval(int64_t bytes)
+prthumanval(const char *fmt, int64_t bytes)
 {
 	char buf[6];
 	int flags;
@@ -372,14 +387,15 @@ prthumanval(int64_t bytes)
 	humanize_number(buf, sizeof(buf) - (bytes < 0 ? 0 : 1),
 	    bytes, "", HN_AUTOSCALE, flags);
 
-	(void)printf("  %6s", buf);
+	xo_attr("value", "%lld", (long long) bytes);
+	xo_emit(fmt, buf);
 }
 
 /*
  * Print an inode count in "human-readable" format.
  */
 static void
-prthumanvalinode(int64_t bytes)
+prthumanvalinode(const char *fmt, int64_t bytes)
 {
 	char buf[6];
 	int flags;
@@ -389,7 +405,8 @@ prthumanvalinode(int64_t bytes)
 	humanize_number(buf, sizeof(buf) - (bytes < 0 ? 0 : 1),
 	    bytes, "", HN_AUTOSCALE, flags);
 
-	(void)printf(" %5s", buf);
+	xo_attr("value", "%lld", (long long) bytes);
+	xo_emit(fmt, buf);
 }
 
 /*
@@ -434,70 +451,77 @@ prtstat(struct statfs *sfsp, struct maxw
 		mwp->used = imax(mwp->used, (int)strlen("Used"));
 		mwp->avail = imax(mwp->avail, (int)strlen("Avail"));
 
-		(void)printf("%-*s", mwp->mntfrom, "Filesystem");
+		xo_emit("{T:/%-*s}", mwp->mntfrom, "Filesystem");
 		if (Tflag)
-			(void)printf("  %-*s", mwp->fstype, "Type");
-		(void)printf(" %*s %*s %*s Capacity", mwp->total, header,
-		    mwp->used, "Used", mwp->avail, "Avail");
+			xo_emit("  {T:/%-*s}", mwp->fstype, "Type");
+		xo_emit(" {T:/%*s} {T:/%*s} {T:/%*s} Capacity",
+			mwp->total, header,
+			mwp->used, "Used", mwp->avail, "Avail");
 		if (iflag) {
 			mwp->iused = imax(hflag ? 0 : mwp->iused,
 			    (int)strlen("  iused"));
 			mwp->ifree = imax(hflag ? 0 : mwp->ifree,
 			    (int)strlen("ifree"));
-			(void)printf(" %*s %*s %%iused",
+			xo_emit(" {T:/%*s} {T:/%*s} {T:\%iused}",
 			    mwp->iused - 2, "iused", mwp->ifree, "ifree");
 		}
-		(void)printf("  Mounted on\n");
+		xo_emit("  {T:Mounted on}\n");
 	}
+
+	xo_open_instance("filesystem");
 	/* Check for 0 block size.  Can this happen? */
 	if (sfsp->f_bsize == 0) {
-		warnx ("File system %s does not have a block size, assuming 512.",
+		xo_warnx ("File system %s does not have a block size, assuming 512.",
 		    sfsp->f_mntonname);
 		sfsp->f_bsize = 512;
 	}
-	(void)printf("%-*s", mwp->mntfrom, sfsp->f_mntfromname);
+	xo_emit("{tk:name/%-*s}", mwp->mntfrom, sfsp->f_mntfromname);
 	if (Tflag)
-		(void)printf("  %-*s", mwp->fstype, sfsp->f_fstypename);
+		xo_emit("  {:type/%-*s}", mwp->fstype, sfsp->f_fstypename);
 	used = sfsp->f_blocks - sfsp->f_bfree;
 	availblks = sfsp->f_bavail + used;
 	if (hflag) {
 		prthuman(sfsp, used);
 	} else {
 		if (thousands)
-		    format = " %*j'd %*j'd %*j'd";
+		    format = " {t:total-blocks/%*j'd} {t:used-blocks/%*j'd} "
+			"{t:available-blocks/%*j'd}";
 		else
-		    format = " %*jd %*jd %*jd";
-		(void)printf(format,
+		    format = " {t:total-blocks/%*jd} {t:used-blocks/%*jd} "
+			"{t:available-blocks/%*jd}";
+		xo_emit(format,
 		    mwp->total, fsbtoblk(sfsp->f_blocks,
 		    sfsp->f_bsize, blocksize),
 		    mwp->used, fsbtoblk(used, sfsp->f_bsize, blocksize),
 		    mwp->avail, fsbtoblk(sfsp->f_bavail,
 		    sfsp->f_bsize, blocksize));
 	}
-	(void)printf(" %5.0f%%",
+	xo_emit(" {:used-percent/%5.0f}{U:%%}",
 	    availblks == 0 ? 100.0 : (double)used / (double)availblks * 100.0);
 	if (iflag) {
 		inodes = sfsp->f_files;
 		used = inodes - sfsp->f_ffree;
 		if (hflag) {
-			(void)printf("  ");
-			prthumanvalinode(used);
-			prthumanvalinode(sfsp->f_ffree);
+			xo_emit("  ");
+			prthumanvalinode(" {:inodes-used/%5s}", used);
+			prthumanvalinode(" {:inodes-free/%5s}", sfsp->f_ffree);
 		} else {
 			if (thousands)
-			    format = " %*j'd %*j'd";
+			    format = " {:inodes-used/%*j'd} {:inodes-free/%*j'd}";
 			else
-			    format = " %*jd %*jd";
-			(void)printf(format, mwp->iused, (intmax_t)used,
+			    format = " {:inodes-used/%*jd} {:inodes-free/%*jd}";
+			xo_emit(format, mwp->iused, (intmax_t)used,
 			    mwp->ifree, (intmax_t)sfsp->f_ffree);
 		}
-		(void)printf(" %4.0f%% ", inodes == 0 ? 100.0 :
-		    (double)used / (double)inodes * 100.0);
+		xo_emit(" {:inodes-used-percent/%4.0f}{U:%%} ",
+			inodes == 0 ? 100.0 :
+			(double)used / (double)inodes * 100.0);
 	} else
-		(void)printf("  ");
+		xo_emit("  ");
 	if (strncmp(sfsp->f_mntfromname, "total", MNAMELEN) != 0)
-		(void)printf("  %s", sfsp->f_mntonname);
-	(void)printf("\n");
+		xo_emit("  {:mounted-on}", sfsp->f_mntonname);
+	xo_emit("\n");
+	xo_close_instance("filesystem");
 }
 
 static void
@@ -564,7 +588,7 @@ static void
 usage(void)
 {
 
-	(void)fprintf(stderr,
+	xo_error(
 "usage: df [-b | -g | -H | -h | -k | -m | -P] [-acilnT] [-t type] [-,]\n"
 "          [file | filesystem ...]\n");
 	exit(EX_USAGE);
@@ -579,24 +603,24 @@ makenetvfslist(void)
 	int cnt, i, maxvfsconf;
 
 	if (sysctlbyname("vfs.conflist", NULL, &buflen, NULL, 0) < 0) {
-		warn("sysctl(vfs.conflist)");
+		xo_warn("sysctl(vfs.conflist)");
 		return (NULL);
 	}
 	xvfsp = malloc(buflen);
 	if (xvfsp == NULL) {
-		warnx("malloc failed");
+		xo_warnx("malloc failed");
 		return (NULL);
 	}
 	keep_xvfsp = xvfsp;
 	if (sysctlbyname("vfs.conflist", xvfsp, &buflen, NULL, 0) < 0) {
-		warn("sysctl(vfs.conflist)");
+		xo_warn("sysctl(vfs.conflist)");
 		free(keep_xvfsp);
 		return (NULL);
 	}
 	maxvfsconf = buflen / sizeof(struct xvfsconf);
 
 	if ((listptr = malloc(sizeof(char*) * maxvfsconf)) == NULL) {
-		warnx("malloc failed");
+		xo_warnx("malloc failed");
 		free(keep_xvfsp);
 		return (NULL);
 	}
@@ -605,7 +629,7 @@ makenetvfslist(void)
 		if (xvfsp->vfc_flags & VFCF_NETWORK) {
 			listptr[cnt++] = strdup(xvfsp->vfc_name);
 			if (listptr[cnt-1] == NULL) {
-				warnx("malloc failed");
+				xo_warnx("malloc failed");
 				free(listptr);
 				free(keep_xvfsp);
 				return (NULL);
@@ -617,7 +641,7 @@ makenetvfslist(void)
 	if (cnt == 0 ||
 	    (str = malloc(sizeof(char) * (32 * cnt + cnt + 2))) == NULL) {
 		if (cnt > 0)
-			warnx("malloc failed");
+			xo_warnx("malloc failed");
 		free(listptr);
 		free(keep_xvfsp);
 		return (NULL);


More information about the svn-src-all mailing list