socsvn commit: r269834 - soc2014/zkorchev/freebsd_head/usr.bin/fstat

zkorchev at FreeBSD.org zkorchev at FreeBSD.org
Sat Jun 21 23:30:11 UTC 2014


Author: zkorchev
Date: Sat Jun 21 23:30:10 2014
New Revision: 269834
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269834

Log:
  fstat fixes

Modified:
  soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.1
  soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.c

Modified: soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.1
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.1	Sat Jun 21 22:53:21 2014	(r269833)
+++ soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.1	Sat Jun 21 23:30:10 2014	(r269834)
@@ -71,8 +71,6 @@
 .It Fl N
 Extract the name list from the specified system instead of the default,
 which is the kernel image the system has booted from.
-.It Fl O
-Output the results in JSON format.
 .It Fl m
 Include memory-mapped files in the listing; normally these are excluded
 due to the extra processing required.

Modified: soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.c	Sat Jun 21 22:53:21 2014	(r269833)
+++ soc2014/zkorchev/freebsd_head/usr.bin/fstat/fstat.c	Sat Jun 21 23:30:10 2014	(r269834)
@@ -54,7 +54,9 @@
 #include <string.h>
 #include <unistd.h>
 #include <netdb.h>
-#include <sol.h>
+#if defined(SOL_ON)
+# include <sol.h>
+#endif
 
 #include "functions.h"
 
@@ -65,7 +67,7 @@
 static int	nflg;	/* (numerical) display f.s. and rdev as dev_t */
 static int	mflg;	/* include memory-mapped files */
 static int	vflg;	/* be verbose */
-static int	Oflg;	/* use JSON as output format */
+static int	sol_format;	/* use libsol for output */
 
 typedef struct devs {
 	struct devs	*next;
@@ -77,7 +79,9 @@
 static DEVS *devs;
 static char *memf, *nlistf;
 
+#if defined(SOL_ON)
 static struct sol_stream sol_stream;
+#endif
 
 static int	getfname(const char *filename);
 static void	dofiles(struct procstat *procstat, struct kinfo_proc *p);
@@ -108,8 +112,7 @@
 	int cnt, i;
 
 	/* prevent unused variable warnings */
-	(void)sol_stream;
-	(void)Oflg;
+	(void)sol_format;
 
 	arg = 0;
 	what = KERN_PROC_PROC;
@@ -152,13 +155,6 @@
 		case 'v':
 			vflg = 1;
 			break;
-		case 'O':
-#if defined(SOL_ON)
-			Oflg = 1;
-#else
-			errx(1, "compiled without -O support");
-#endif
-			break;
 		case '?':
 		default:
 			usage();
@@ -191,11 +187,9 @@
 		errx(1, "procstat_getprocs()");
 
 #if defined(SOL_ON)
-	if (Oflg)
-	{
-		sol_init(&sol_stream, SOL_JSON);
+	sol_format = sol_init(&sol_stream);
+	if (sol_format)
 		sol_array_start(&sol_stream);
-	}
 	else
 #endif
 	{
@@ -224,7 +218,7 @@
 	}
 
 #if defined(SOL_ON)
-	if (Oflg) {
+	if (sol_format) {
 		sol_array_end(&sol_stream);
 		sol_term(&sol_stream);
 	}
@@ -253,7 +247,7 @@
 		return;
 	STAILQ_FOREACH(fst, head, next) {
 #if defined(SOL_ON)
-		if (Oflg) {
+		if (sol_format) {
 			sol_map_start(&sol_stream);
 			print_file_info(procstat, fst, uname, cmd, pid);
 			sol_map_end(&sol_stream);
@@ -298,18 +292,18 @@
 	}
 
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
-		sol_map_key(&sol_stream, "user", 4);
+		SOL_MAP_KEYL(&sol_stream, "user");
 		sol_string(&sol_stream, uname, strlen(uname));
 
-		sol_map_key(&sol_stream, "cmd", 3);
+		SOL_MAP_KEYL(&sol_stream, "cmd");
 		sol_string(&sol_stream, cmd, strlen(cmd));
 
-		sol_map_key(&sol_stream, "pid", 3);
+		SOL_MAP_KEYL(&sol_stream, "pid");
 		sol_integer(&sol_stream, pid);
 
-		sol_map_key(&sol_stream, "fd", 2);
+		SOL_MAP_KEYL(&sol_stream, "fd");
 		if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
 			sol_string(&sol_stream, "text", 4);
 		else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
@@ -383,15 +377,15 @@
 	}
 	if (filename && !fsflg) {
 #if defined(SOL_ON)
-		if (Oflg) {
-			sol_map_key(&sol_stream, "name", 4);
+		if (sol_format) {
+			SOL_MAP_KEYL(&sol_stream, "name");
 			sol_string(&sol_stream, filename, strlen(filename));
 		}
 		else
 #endif
 			printf("  %s", filename);
 	}
-	if (!Oflg) putchar('\n');
+	if (!sol_format) putchar('\n');
 }
 
 static void
@@ -414,16 +408,16 @@
 
 	error = procstat_get_socket_info(procstat, fst, &sock, errbuf);
 	if (error != 0) {
-		if (!Oflg) printf("* error");
+		if (!sol_format) printf("* error");
 		return;
 	}
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
-		sol_map_key(&sol_stream, "socket", 6);
+		SOL_MAP_KEYL(&sol_stream, "socket");
 		sol_string(&sol_stream, sock.dname, strlen(sock.dname));
 
-		sol_map_key(&sol_stream, "type", 4);
+		SOL_MAP_KEYL(&sol_stream, "type");
 		if (sock.type > STYPEMAX)
 			sol_integer(&sol_stream, sock.type);
 		else
@@ -455,22 +449,22 @@
 		if (!isopen)
 			setprotoent(++isopen);
 #if defined(SOL_ON)
-		if (Oflg)
+		if (sol_format)
 		{
-			sol_map_key(&sol_stream, "proto", 5);
+			SOL_MAP_KEYL(&sol_stream, "proto");
 			if ((pe = getprotobynumber(sock.proto)) != NULL)
 				sol_string(&sol_stream, pe->p_name, strlen(pe->p_name));
 			else
 				sol_integer(&sol_stream, sock.proto);
 			if (sock.proto == IPPROTO_TCP ) {
 				if (sock.inp_ppcb != 0) {
-					sol_map_key(&sol_stream, "ppcb", 4);
-					sol_integer(&sol_stream, sock.inp_ppcb); // TODO hex?
+					SOL_MAP_KEYL(&sol_stream, "ppcb");
+					sol_uinteger(&sol_stream, sock.inp_ppcb);
 				}
 			}
 			else if (sock.so_pcb != 0) {
-				sol_map_key(&sol_stream, "pcb", 3);
-				sol_integer(&sol_stream, sock.so_pcb); // TODO hex?
+				SOL_MAP_KEYL(&sol_stream, "pcb");
+				sol_uinteger(&sol_stream, sock.so_pcb);
 			}
 		}
 		else
@@ -492,9 +486,9 @@
 		/* print address of pcb and connected pcb */
 		if (sock.so_pcb != 0) {
 #if defined(SOL_ON)
-			if (Oflg) {
-				sol_map_key(&sol_stream, "pcb", 3);
-				sol_integer(&sol_stream, sock.so_pcb); // TODO hex?
+			if (sol_format) {
+				SOL_MAP_KEYL(&sol_stream, "pcb");
+				sol_uinteger(&sol_stream, sock.so_pcb);
 			}
 			else
 #endif
@@ -511,11 +505,11 @@
 					*cp++ = '>';
 				*cp = '\0';
 #if defined(SOL_ON)
-				if (Oflg) {
-					sol_map_key(&sol_stream, "flow", 4);
+				if (sol_format) {
+					SOL_MAP_KEYL(&sol_stream, "flow");
 					sol_string(&sol_stream, shoconn, cp - shoconn);
-					sol_map_key(&sol_stream, "conn", 4);
-					sol_integer(&sol_stream, sock.unp_conn); // TODO hex?
+					SOL_MAP_KEYL(&sol_stream, "conn");
+					sol_uinteger(&sol_stream, sock.unp_conn);
 				}
 				else
 #endif
@@ -526,10 +520,10 @@
 	default:
 		/* print protocol number and socket address */
 #if defined(SOL_ON)
-		if (Oflg) {
-			sol_map_key(&sol_stream, "proto", 5);
+		if (sol_format) {
+			SOL_MAP_KEYL(&sol_stream, "proto");
 			sol_integer(&sol_stream, sock.proto);
-			sol_map_key(&sol_stream, "address", 7);
+			SOL_MAP_KEYL(&sol_stream, "address");
 			sol_integer(&sol_stream, sock.so_addr);
 		}
 		else
@@ -547,13 +541,13 @@
 
 	error = procstat_get_pipe_info(procstat, fst, &ps, errbuf);
 	if (error != 0) {
-		if (!Oflg) printf("* error");
+		if (!sol_format) printf("* error");
 		return;
 	}
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
-		sol_map_key(&sol_stream, "pipe", 4);
+		SOL_MAP_KEYL(&sol_stream, "pipe");
 		sol_array_start(&sol_stream);
 		sol_integer(&sol_stream, (u_long)ps.addr);
 		sol_integer(&sol_stream, (u_long)ps.peer);
@@ -577,17 +571,17 @@
 
 	error = procstat_get_pts_info(procstat, fst, &pts, errbuf);
 	if (error != 0) {
-		if (!Oflg) printf("* error");
+		if (!sol_format) printf("* error");
 		return;
 	}
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
 		if (nflg || !*pts.devname) {
-			sol_map_key(&sol_stream, "ptm", 3);
+			SOL_MAP_KEYL(&sol_stream, "ptm");
 			sol_integer(&sol_stream, pts.dev);
 		} else {
-			sol_map_key(&sol_stream, "ptmname", 7);
+			SOL_MAP_KEYL(&sol_stream, "ptmname");
 			sol_string(&sol_stream, pts.devname, strlen(pts.devname));
 		}
 	}
@@ -614,25 +608,25 @@
 
 	error = procstat_get_sem_info(procstat, fst, &sem, errbuf);
 	if (error != 0) {
-		if (!Oflg) printf("* error");
+		if (!sol_format) printf("* error");
 		return;
 	}
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
 		if (nflg) {
 			(void)snprintf(mode, sizeof(mode), "%o", sem.mode);
 		}
 		else {
 			if (fst->fs_path) {
-				sol_map_key(&sol_stream, "path", 4);
+				SOL_MAP_KEYL(&sol_stream, "path");
 				sol_string(&sol_stream, fst->fs_path, strlen(fst->fs_path));
 			}
 			strmode(sem.mode, mode);
 		}
-		sol_map_key(&sol_stream, "mode", 4);
+		SOL_MAP_KEYL(&sol_stream, "mode");
 		sol_string(&sol_stream, mode, strlen(mode));
-		sol_map_key(&sol_stream, "sem", 3);
+		SOL_MAP_KEYL(&sol_stream, "sem");
 		sol_integer(&sol_stream, sem.value);
 	}
 	else
@@ -660,25 +654,25 @@
 
 	error = procstat_get_shm_info(procstat, fst, &shm, errbuf);
 	if (error != 0) {
-		if (!Oflg) printf("* error");
+		if (!sol_format) printf("* error");
 		return;
 	}
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
 		if (nflg) {
 			(void)snprintf(mode, sizeof(mode), "%o", shm.mode);
 		}
 		else {
 			if (fst->fs_path) {
-				sol_map_key(&sol_stream, "path", 4);
+				SOL_MAP_KEYL(&sol_stream, "path");
 				sol_string(&sol_stream, fst->fs_path, strlen(fst->fs_path));
 			}
 			strmode(shm.mode, mode);
 		}
-		sol_map_key(&sol_stream, "mode", 4);
+		SOL_MAP_KEYL(&sol_stream, "mode");
 		sol_string(&sol_stream, mode, strlen(mode));
-		sol_map_key(&sol_stream, "shmsize", 7);
+		SOL_MAP_KEYL(&sol_stream, "shmsize");
 		sol_integer(&sol_stream, shm.size);
 	}
 	else
@@ -715,8 +709,8 @@
 		badtype = "none";
 	if (badtype != NULL) {
 #if defined(SOL_ON)
-		if (Oflg) {
-			sol_map_key(&sol_stream, "mode", 4);
+		if (sol_format) {
+			SOL_MAP_KEYL(&sol_stream, "mode");
 			sol_string(&sol_stream, badtype, strlen(badtype));
 		}
 		else
@@ -726,13 +720,13 @@
 	}
 
 #if defined(SOL_ON)
-	if (Oflg) {
+	if (sol_format) {
 		if (nflg) {
-			sol_map_key(&sol_stream, "dev", 3);
-			sol_integer(&sol_stream, vn.vn_fsid); // TODO hex?
+			SOL_MAP_KEYL(&sol_stream, "dev");
+			sol_uinteger(&sol_stream, vn.vn_fsid);
 		}
 		else if (vn.vn_mntdir != NULL) {
-			sol_map_key(&sol_stream, "mount", 5);
+			SOL_MAP_KEYL(&sol_stream, "mount");
 			sol_string(&sol_stream, vn.vn_mntdir, strlen(vn.vn_mntdir));
 		}
 	}
@@ -754,12 +748,12 @@
 		strmode(vn.vn_mode, mode);
 	}
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
-		sol_map_key(&sol_stream, "inode", 5);
+		SOL_MAP_KEYL(&sol_stream, "inode");
 		sol_integer(&sol_stream, vn.vn_fileid);
 
-		sol_map_key(&sol_stream, "mode", 4);
+		SOL_MAP_KEYL(&sol_stream, "mode");
 		sol_string(&sol_stream, mode, strlen(mode));
 	}
 	else
@@ -767,24 +761,24 @@
 		(void)printf(" %6jd %10s", (intmax_t)vn.vn_fileid, mode);
 
 #if defined(SOL_ON)
-	if (Oflg)
+	if (sol_format)
 	{
 		if (vn.vn_type == PS_FST_VTYPE_VBLK || vn.vn_type == PS_FST_VTYPE_VCHR) {
 			if (nflg || !*vn.vn_devname) {
-				sol_map_key(&sol_stream, "dev", 3);
-				sol_integer(&sol_stream, vn.vn_dev); // TODO hex?
+				SOL_MAP_KEYL(&sol_stream, "dev");
+				sol_uinteger(&sol_stream, vn.vn_dev);
 			}
 			else {
-				sol_map_key(&sol_stream, "devname", 7);
+				SOL_MAP_KEYL(&sol_stream, "devname");
 				sol_string(&sol_stream, vn.vn_devname, strlen(vn.vn_devname));
 			}
 		} else
-			sol_map_key(&sol_stream, "size", 4);
+			SOL_MAP_KEYL(&sol_stream, "size");
 			sol_integer(&sol_stream, vn.vn_size);
 	}
 	else
-	{
 #endif
+	{
 		if (vn.vn_type == PS_FST_VTYPE_VBLK || vn.vn_type == PS_FST_VTYPE_VCHR) {
 			if (nflg || !*vn.vn_devname) {
 				printf(" %#6jx", (uintmax_t)vn.vn_dev);
@@ -809,8 +803,8 @@
 	if (flags & PS_FST_FFLAG_WRITE)
 		strcat(rw, "w");
 #if defined(SOL_ON)
-	if (Oflg) {
-		sol_map_key(&sol_stream, "r/w", 3);
+	if (sol_format) {
+		SOL_MAP_KEYL(&sol_stream, "r/w");
 		sol_string(&sol_stream, rw, strlen(rw));
 	}
 	else
@@ -843,6 +837,6 @@
 usage(void)
 {
 	(void)fprintf(stderr,
- "usage: fstat [-fmnv] [-M core] [-N system] [-p pid] [-u user] [-O] [file ...]\n");
+ "usage: fstat [-fmnv] [-M core] [-N system] [-p pid] [-u user] [file ...]\n");
 	exit(1);
 }


More information about the svn-soc-all mailing list