socsvn commit: r270544 - soc2014/zkorchev/freebsd_head/usr.bin/procstat

zkorchev at FreeBSD.org zkorchev at FreeBSD.org
Mon Jul 7 10:32:52 UTC 2014


Author: zkorchev
Date: Mon Jul  7 10:32:48 2014
New Revision: 270544
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=270544

Log:
  added libsol support to procstat

Modified:
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_kstack.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_rlimit.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_rusage.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_sigs.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_threads.c
  soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_vm.c

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/Makefile	Mon Jul  7 10:32:48 2014	(r270544)
@@ -16,7 +16,8 @@
 	procstat_threads.c	\
 	procstat_vm.c
 
-LDADD+=	-lutil -lprocstat -lkvm
+LDADD+=	-lutil -lprocstat -lkvm -lsol
 DPADD+=	${LIBUTIL} ${LIBPROCSTAT} ${LIBKVM}
+CFLAGS+=-DSOL_ON -I/usr/local/include -g
 
 .include <bsd.prog.mk>

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -43,6 +43,11 @@
 static int sflag, tflag, vflag, xflag;
 int	hflag, nflag, Cflag, Hflag;
 
+int sol_format;
+#if defined(SOL_ON)
+struct sol_stream sol_stream;
+#endif
+
 static void
 usage(void)
 {
@@ -250,18 +255,27 @@
 		prstat = procstat_open_sysctl();
 	if (prstat == NULL)
 		errx(1, "procstat_open()");
+#if defined(SOL_ON)
+	sol_format = sol_init(&sol_stream);
+#endif
 	do {
 		if (aflag) {
 			p = procstat_getprocs(prstat, KERN_PROC_PROC, 0, &cnt);
 			if (p == NULL)
 				errx(1, "procstat_getprocs()");
 			kinfo_proc_sort(p, cnt);
+#if defined(SOL_ON)
+			if (sol_format) sol_array_start(&sol_stream);
+#endif
 			for (i = 0; i < cnt; i++) {
 				procstat(prstat, &p[i]);
 
 				/* Suppress header after first process. */
 				hflag = 1;
 			}
+#if defined(SOL_ON)
+			if (sol_format) sol_array_end(&sol_stream);
+#endif
 			procstat_freeprocs(prstat, p);
 		}
 		for (i = 0; i < argc; i++) {
@@ -298,6 +312,9 @@
 		if (interval)
 			sleep(interval);
 	} while (interval);
+#if defined(SOL_ON)
+	if (sol_format) sol_term(&sol_stream);
+#endif
 	procstat_close(prstat);
 	exit(0);
 }

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat.h	Mon Jul  7 10:32:48 2014	(r270544)
@@ -29,8 +29,17 @@
 #ifndef PROCSTAT_H
 #define	PROCSTAT_H
 
+#if defined(SOL_ON)
+# include <sol.h>
+#endif
+
 extern int	hflag, nflag, Cflag, Hflag;
 
+extern int sol_format;
+#if defined(SOL_ON)
+extern struct sol_stream sol_stream;
+#endif
+
 struct kinfo_proc;
 void	kinfo_proc_sort(struct kinfo_proc *kipp, int count);
 

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_args.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -46,24 +46,50 @@
 	int i;
 	char **args;
 
-	if (!hflag) {
-		printf("%5s %-16s %-53s\n", "PID", "COMM",
-		    env ? "ENVIRONMENT" : "ARGS");
-	}
-
 	args = env ? procstat_getenvv(procstat, kipp, 0) :
 	    procstat_getargv(procstat, kipp, 0);
 
-	printf("%5d %-16s", kipp->ki_pid, kipp->ki_comm);
-
-	if (args == NULL) {
-		printf(" -\n");
-		return;
+#if defined(SOL_ON)
+	if (sol_format)
+	{
+		sol_map_start(&sol_stream);
+		SOL_MAP_KEYL(&sol_stream, "pid");
+		sol_integer(&sol_stream, kipp->ki_pid);
+		SOL_MAP_KEYL(&sol_stream, "cmd");
+		sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+		if (env)
+			SOL_MAP_KEYL(&sol_stream, "env");
+		else
+			SOL_MAP_KEYL(&sol_stream, "args");
+		if (args == NULL)
+			sol_string(&sol_stream, "-", 1);
+		else {
+			sol_array_start(&sol_stream);
+			for (i = 0; args[i] != NULL; i++)
+				sol_string(&sol_stream, args[i], strlen(args[i]));
+			sol_array_end(&sol_stream);
+		}
+		sol_map_end(&sol_stream);
+	}
+	else
+#endif
+	{
+		if (!hflag) {
+			printf("%5s %-16s %-53s\n", "PID", "COMM",
+				env ? "ENVIRONMENT" : "ARGS");
+		}
+
+		printf("%5d %-16s", kipp->ki_pid, kipp->ki_comm);
+
+		if (args == NULL) {
+			printf(" -\n");
+			return;
+		}
+
+		for (i = 0; args[i] != NULL; i++)
+			printf(" %s", args[i]);
+		printf("\n");
 	}
-
-	for (i = 0; args[i] != NULL; i++)
-		printf(" %s", args[i]);
-	printf("\n");
 }
 
 void

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_auxv.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -48,6 +48,12 @@
 #define	PRINT_UNKNOWN(type, val)	\
 	printf("%s %16ld %#lx\n", prefix, (long)type, (u_long)(val))
 
+#define SOL_PRINT(name, func, ...) name: \
+	SOL_MAP_KEYL(&sol_stream, "auxv"); \
+	sol_string(&sol_stream, #name, sizeof(#name) - 1); \
+	SOL_MAP_KEYL(&sol_stream, "value"); \
+	func(&sol_stream, __VA_ARGS__)
+
 void
 procstat_auxv(struct procstat *procstat, struct kinfo_proc *kipp)
 {
@@ -55,106 +61,201 @@
 	u_int count, i;
 	static char prefix[256];
 
-	if (!hflag)
-		printf("%5s %-16s %-16s %-16s\n", "PID", "COMM", "AUXV", "VALUE");
+#if defined(SOL_ON)
+	if (!sol_format)
+#endif
+		if (!hflag)
+			printf("%5s %-16s %-16s %-16s\n", "PID", "COMM", "AUXV", "VALUE");
 	auxv = procstat_getauxv(procstat, kipp, &count);
 	if (auxv == NULL)
 		return;
 	snprintf(prefix, sizeof(prefix), "%5d %-16s", kipp->ki_pid,
 	    kipp->ki_comm);
 	for (i = 0; i < count; i++) {
-		switch(auxv[i].a_type) {
-		case AT_NULL:
-			return;
-		case AT_IGNORE:
-			break;
-		case AT_EXECFD:
-			PRINT(AT_EXECFD, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_PHDR:
-			PRINT(AT_PHDR, %p, auxv[i].a_un.a_ptr);
-			break;
-		case AT_PHENT:
-			PRINT(AT_PHENT, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_PHNUM:
-			PRINT(AT_PHNUM, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_PAGESZ:
-			PRINT(AT_PAGESZ, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_BASE:
-			PRINT(AT_BASE, %p, auxv[i].a_un.a_ptr);
-			break;
-		case AT_FLAGS:
-			PRINT(AT_FLAGS, %#lx, (u_long)auxv[i].a_un.a_val);
-			break;
-		case AT_ENTRY:
-			PRINT(AT_ENTRY, %p, auxv[i].a_un.a_ptr);
-			break;
+#if defined(SOL_ON)
+		if (sol_format)
+		{
+			if (auxv[i].a_type == AT_NULL) return;
+
+			sol_map_start(&sol_stream);
+			SOL_MAP_KEYL(&sol_stream, "pid");
+			sol_integer(&sol_stream, kipp->ki_pid);
+			SOL_MAP_KEYL(&sol_stream, "cmd");
+			sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+			switch(auxv[i].a_type) {
+			case AT_IGNORE:
+				break;
+			case SOL_PRINT(AT_EXECFD, sol_integer, auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_PHDR, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+			case SOL_PRINT(AT_PHENT, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_PHNUM, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_PAGESZ, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_BASE, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+			case SOL_PRINT(AT_FLAGS, sol_uinteger, (u_long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_ENTRY, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+#ifdef AT_NOTELF
+			case SOL_PRINT(AT_NOTELF, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+#endif
+#ifdef AT_UID
+			case SOL_PRINT(AT_UID, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+#endif
+#ifdef AT_EUID
+			case SOL_PRINT(AT_EUID, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+#endif
+#ifdef AT_GID
+			case SOL_PRINT(AT_GID, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+#endif
+#ifdef AT_EGID
+			case SOL_PRINT(AT_EGID, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+#endif
+			case SOL_PRINT(AT_EXECPATH, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+			case SOL_PRINT(AT_CANARY, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+			case SOL_PRINT(AT_CANARYLEN, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_OSRELDATE, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_NCPUS, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case SOL_PRINT(AT_PAGESIZES, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+			case SOL_PRINT(AT_PAGESIZESLEN, sol_integer, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_STACKPROT:
+				SOL_MAP_KEYL(&sol_stream, "auxv");
+				sol_string(&sol_stream, "AT_STACKPROT", sizeof("AT_STACKPROT") - 1);
+				SOL_MAP_KEYL(&sol_stream, "value");
+				if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
+					sol_string(&sol_stream, "NONEXECUTABLE", sizeof("NONEXECUTABLE") - 1);
+				else
+					sol_string(&sol_stream, "EXECUTABLE", sizeof("EXECUTABLE") - 1);
+				break;
+#ifdef AT_TIMEKEEP
+			case SOL_PRINT(AT_TIMEKEEP, sol_uinteger, (uintmax_t)auxv[i].a_un.a_ptr);
+				break;
+#endif
+			default:
+				SOL_MAP_KEYL(&sol_stream, "auxv");
+				sol_integer(&sol_stream, (long)auxv[i].a_type);
+				SOL_MAP_KEYL(&sol_stream, "value");
+				sol_uinteger(&sol_stream, (u_long)auxv[i].a_un.a_val);
+				break;
+			}
+			sol_map_end(&sol_stream);
+		}
+		else
+#endif
+		{
+			switch(auxv[i].a_type) {
+			case AT_NULL:
+				return;
+			case AT_IGNORE:
+				break;
+			case AT_EXECFD:
+				PRINT(AT_EXECFD, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_PHDR:
+				PRINT(AT_PHDR, %p, auxv[i].a_un.a_ptr);
+				break;
+			case AT_PHENT:
+				PRINT(AT_PHENT, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_PHNUM:
+				PRINT(AT_PHNUM, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_PAGESZ:
+				PRINT(AT_PAGESZ, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_BASE:
+				PRINT(AT_BASE, %p, auxv[i].a_un.a_ptr);
+				break;
+			case AT_FLAGS:
+				PRINT(AT_FLAGS, %#lx, (u_long)auxv[i].a_un.a_val);
+				break;
+			case AT_ENTRY:
+				PRINT(AT_ENTRY, %p, auxv[i].a_un.a_ptr);
+				break;
 #ifdef AT_NOTELF
-		case AT_NOTELF:
-			PRINT(AT_NOTELF, %ld, (long)auxv[i].a_un.a_val);
-			break;
+			case AT_NOTELF:
+				PRINT(AT_NOTELF, %ld, (long)auxv[i].a_un.a_val);
+				break;
 #endif
 #ifdef AT_UID
-		case AT_UID:
-			PRINT(AT_UID, %ld, (long)auxv[i].a_un.a_val);
-			break;
+			case AT_UID:
+				PRINT(AT_UID, %ld, (long)auxv[i].a_un.a_val);
+				break;
 #endif
 #ifdef AT_EUID
-		case AT_EUID:
-			PRINT(AT_EUID, %ld, (long)auxv[i].a_un.a_val);
-			break;
+			case AT_EUID:
+				PRINT(AT_EUID, %ld, (long)auxv[i].a_un.a_val);
+				break;
 #endif
 #ifdef AT_GID
-		case AT_GID:
-			PRINT(AT_GID, %ld, (long)auxv[i].a_un.a_val);
-			break;
+			case AT_GID:
+				PRINT(AT_GID, %ld, (long)auxv[i].a_un.a_val);
+				break;
 #endif
 #ifdef AT_EGID
-		case AT_EGID:
-			PRINT(AT_EGID, %ld, (long)auxv[i].a_un.a_val);
-			break;
-#endif
-		case AT_EXECPATH:
-			PRINT(AT_EXECPATH, %p, auxv[i].a_un.a_ptr);
-			break;
-		case AT_CANARY:
-			PRINT(AT_CANARY, %p, auxv[i].a_un.a_ptr);
-			break;
-		case AT_CANARYLEN:
-			PRINT(AT_CANARYLEN, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_OSRELDATE:
-			PRINT(AT_OSRELDATE, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_NCPUS:
-			PRINT(AT_NCPUS, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_PAGESIZES:
-			PRINT(AT_PAGESIZES, %p, auxv[i].a_un.a_ptr);
-			break;
-		case AT_PAGESIZESLEN:
-			PRINT(AT_PAGESIZESLEN, %ld, (long)auxv[i].a_un.a_val);
-			break;
-		case AT_STACKPROT:
-			if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
-				PRINT(AT_STACKPROT, %s, "NONEXECUTABLE");
-			else
-				PRINT(AT_STACKPROT, %s, "EXECUTABLE");
-			break;
+			case AT_EGID:
+				PRINT(AT_EGID, %ld, (long)auxv[i].a_un.a_val);
+				break;
+#endif
+			case AT_EXECPATH:
+				PRINT(AT_EXECPATH, %p, auxv[i].a_un.a_ptr);
+				break;
+			case AT_CANARY:
+				PRINT(AT_CANARY, %p, auxv[i].a_un.a_ptr);
+				break;
+			case AT_CANARYLEN:
+				PRINT(AT_CANARYLEN, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_OSRELDATE:
+				PRINT(AT_OSRELDATE, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_NCPUS:
+				PRINT(AT_NCPUS, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_PAGESIZES:
+				PRINT(AT_PAGESIZES, %p, auxv[i].a_un.a_ptr);
+				break;
+			case AT_PAGESIZESLEN:
+				PRINT(AT_PAGESIZESLEN, %ld, (long)auxv[i].a_un.a_val);
+				break;
+			case AT_STACKPROT:
+				if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
+					PRINT(AT_STACKPROT, %s, "NONEXECUTABLE");
+				else
+					PRINT(AT_STACKPROT, %s, "EXECUTABLE");
+				break;
 #ifdef AT_TIMEKEEP
-		case AT_TIMEKEEP:
-			PRINT(AT_TIMEKEEP, %p, auxv[i].a_un.a_ptr);
-			break;
-#endif
-		default:
-			PRINT_UNKNOWN(auxv[i].a_type, auxv[i].a_un.a_val);
-			break;
+			case AT_TIMEKEEP:
+				PRINT(AT_TIMEKEEP, %p, auxv[i].a_un.a_ptr);
+				break;
+#endif
+			default:
+				PRINT_UNKNOWN(auxv[i].a_type, auxv[i].a_un.a_val);
+				break;
+			}
 		}
 	}
-	printf("\n");
+#if defined(SOL_ON)
+	if (!sol_format)
+#endif
+		printf("\n");
 	procstat_freeauxv(procstat, auxv);
 }
 

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_basic.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -41,25 +41,56 @@
 procstat_basic(struct kinfo_proc *kipp)
 {
 
-	if (!hflag)
-		printf("%5s %5s %5s %5s %5s %3s %-8s %-9s %-13s %-12s\n",
-		    "PID", "PPID", "PGID", "SID", "TSID", "THR", "LOGIN",
-		    "WCHAN", "EMUL", "COMM");
+#if defined(SOL_ON)
+	if (sol_format)
+	{
+		sol_map_start(&sol_stream);
+		SOL_MAP_KEYL(&sol_stream, "pid");
+		sol_integer(&sol_stream, kipp->ki_pid);
+		SOL_MAP_KEYL(&sol_stream, "ppid");
+		sol_integer(&sol_stream, kipp->ki_ppid);
+		SOL_MAP_KEYL(&sol_stream, "pgid");
+		sol_integer(&sol_stream, kipp->ki_pgid);
+		SOL_MAP_KEYL(&sol_stream, "sid");
+		sol_integer(&sol_stream, kipp->ki_sid);
+		SOL_MAP_KEYL(&sol_stream, "tsid");
+		sol_integer(&sol_stream, kipp->ki_tsid);
+		SOL_MAP_KEYL(&sol_stream, "threads");
+		sol_integer(&sol_stream, kipp->ki_numthreads);
+		SOL_MAP_KEYL(&sol_stream, "login");
+		sol_string(&sol_stream, kipp->ki_login, strlen(kipp->ki_login));
+		SOL_MAP_KEYL(&sol_stream, "wchan");
+		if (kipp->ki_kiflag & KI_LOCKBLOCK) sol_string(&sol_stream, kipp->ki_lockname, strlen(kipp->ki_lockname));
+		else sol_string(&sol_stream, kipp->ki_wmesg, strlen(kipp->ki_wmesg));
+		SOL_MAP_KEYL(&sol_stream, "emul");
+		sol_string(&sol_stream, kipp->ki_emul, strlen(kipp->ki_emul));
+		SOL_MAP_KEYL(&sol_stream, "cmd");
+		sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+		sol_map_end(&sol_stream);
+	}
+	else
+#endif
+	{
+		if (!hflag)
+			printf("%5s %5s %5s %5s %5s %3s %-8s %-9s %-13s %-12s\n",
+				"PID", "PPID", "PGID", "SID", "TSID", "THR", "LOGIN",
+				"WCHAN", "EMUL", "COMM");
 
-	printf("%5d ", kipp->ki_pid);
-	printf("%5d ", kipp->ki_ppid);
-	printf("%5d ", kipp->ki_pgid);
-	printf("%5d ", kipp->ki_sid);
-	printf("%5d ", kipp->ki_tsid);
-	printf("%3d ", kipp->ki_numthreads);
-	printf("%-8s ", strlen(kipp->ki_login) ? kipp->ki_login : "-");
-	if (kipp->ki_kiflag & KI_LOCKBLOCK) {
-		printf("*%-8s ", strlen(kipp->ki_lockname) ?
-		    kipp->ki_lockname : "-");
-	} else {
-		printf("%-9s ", strlen(kipp->ki_wmesg) ?
-		    kipp->ki_wmesg : "-");
+		printf("%5d ", kipp->ki_pid);
+		printf("%5d ", kipp->ki_ppid);
+		printf("%5d ", kipp->ki_pgid);
+		printf("%5d ", kipp->ki_sid);
+		printf("%5d ", kipp->ki_tsid);
+		printf("%3d ", kipp->ki_numthreads);
+		printf("%-8s ", strlen(kipp->ki_login) ? kipp->ki_login : "-");
+		if (kipp->ki_kiflag & KI_LOCKBLOCK) {
+			printf("*%-8s ", strlen(kipp->ki_lockname) ?
+				kipp->ki_lockname : "-");
+		} else {
+			printf("%-9s ", strlen(kipp->ki_wmesg) ?
+				kipp->ki_wmesg : "-");
+		}
+		printf("%-13s ", strcmp(kipp->ki_emul, "null") ? kipp->ki_emul : "-");
+		printf("%-12s\n", kipp->ki_comm);
 	}
-	printf("%-13s ", strcmp(kipp->ki_emul, "null") ? kipp->ki_emul : "-");
-	printf("%-12s\n", kipp->ki_comm);
 }

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_bin.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -44,19 +44,40 @@
 {
 	int osrel;
 	static char pathname[PATH_MAX];
-
-	if (!hflag)
-		printf("%5s %-16s %8s %s\n", "PID", "COMM", "OSREL", "PATH");
+	size_t pathlen;
 
 	if (procstat_getpathname(prstat, kipp, pathname, sizeof(pathname)) != 0)
 		return;
-	if (strlen(pathname) == 0)
+	pathlen = strlen(pathname);
+	if (pathlen == 0) {
 		strcpy(pathname, "-");
+		pathlen = 1;
+	}
 	if (procstat_getosrel(prstat, kipp, &osrel) != 0)
 		return;
 
-	printf("%5d ", kipp->ki_pid);
-	printf("%-16s ", kipp->ki_comm);
-	printf("%8d ", osrel);
-	printf("%s\n", pathname);
+#if defined(SOL_ON)
+	if (sol_format)
+	{
+		sol_map_start(&sol_stream);
+		SOL_MAP_KEYL(&sol_stream, "pid");
+		sol_integer(&sol_stream, kipp->ki_pid);
+		SOL_MAP_KEYL(&sol_stream, "cmd");
+		sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+		SOL_MAP_KEYL(&sol_stream, "osrel");
+		sol_integer(&sol_stream, osrel);
+		SOL_MAP_KEYL(&sol_stream, "path");
+		sol_string(&sol_stream, pathname, strlen(pathname));
+		sol_map_end(&sol_stream);
+	}
+	else
+#endif
+	{
+		if (!hflag)
+			printf("%5s %-16s %8s %s\n", "PID", "COMM", "OSREL", "PATH");
+		printf("%5d ", kipp->ki_pid);
+		printf("%-16s ", kipp->ki_comm);
+		printf("%8d ", osrel);
+		printf("%s\n", pathname);
+	}
 }

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_cred.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -34,6 +34,7 @@
 #include <libprocstat.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 #include <unistd.h>
 
 #include "procstat.h"
@@ -47,22 +48,54 @@
 	unsigned int i, ngroups;
 	gid_t *groups;
 
-	if (!hflag)
-		printf("%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s\n",
-		    "PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID",
-		    "SVGID", "UMASK", "FLAGS", "GROUPS");
-
-	printf("%5d ", kipp->ki_pid);
-	printf("%-16s ", kipp->ki_comm);
-	printf("%5d ", kipp->ki_uid);
-	printf("%5d ", kipp->ki_ruid);
-	printf("%5d ", kipp->ki_svuid);
-	printf("%5d ", kipp->ki_groups[0]);
-	printf("%5d ", kipp->ki_rgid);
-	printf("%5d ", kipp->ki_svgid);
-	printf("%5s ", get_umask(procstat, kipp));
-	printf("%s", kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-");
-	printf("     ");
+
+#if defined(SOL_ON)
+	if (sol_format)
+	{
+		const char *mask = get_umask(procstat, kipp);
+
+		sol_map_start(&sol_stream);
+		SOL_MAP_KEYL(&sol_stream, "pid");
+		sol_integer(&sol_stream, kipp->ki_pid);
+		SOL_MAP_KEYL(&sol_stream, "cmd");
+		sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+		SOL_MAP_KEYL(&sol_stream, "euid");
+		sol_integer(&sol_stream, kipp->ki_uid);
+		SOL_MAP_KEYL(&sol_stream, "ruid");
+		sol_integer(&sol_stream, kipp->ki_ruid);
+		SOL_MAP_KEYL(&sol_stream, "svuid");
+		sol_integer(&sol_stream, kipp->ki_svuid);
+		SOL_MAP_KEYL(&sol_stream, "egid");
+		sol_integer(&sol_stream, kipp->ki_groups[0]);
+		SOL_MAP_KEYL(&sol_stream, "rgid");
+		sol_integer(&sol_stream, kipp->ki_rgid);
+		SOL_MAP_KEYL(&sol_stream, "svgid");
+		sol_integer(&sol_stream, kipp->ki_svgid);
+		SOL_MAP_KEYL(&sol_stream, "umask");
+		sol_string(&sol_stream, mask, strlen(mask));
+		SOL_MAP_KEYL(&sol_stream, "flags");
+		sol_string(&sol_stream, kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-", 1);
+	}
+	else
+#endif
+	{
+		if (!hflag)
+			printf("%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s\n",
+				"PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID",
+				"SVGID", "UMASK", "FLAGS", "GROUPS");
+
+		printf("%5d ", kipp->ki_pid);
+		printf("%-16s ", kipp->ki_comm);
+		printf("%5d ", kipp->ki_uid);
+		printf("%5d ", kipp->ki_ruid);
+		printf("%5d ", kipp->ki_svuid);
+		printf("%5d ", kipp->ki_groups[0]);
+		printf("%5d ", kipp->ki_rgid);
+		printf("%5d ", kipp->ki_svgid);
+		printf("%5s ", get_umask(procstat, kipp));
+		printf("%s", kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-");
+		printf("     ");
+	}
 
 	groups = NULL;
 	/*
@@ -76,12 +109,30 @@
 		ngroups = kipp->ki_ngroups;
 		groups = kipp->ki_groups;
 	}
-	for (i = 0; i < ngroups; i++)
-		printf("%s%d", (i > 0) ? "," : "", groups[i]);
+#if defined(SOL_ON)
+	if (sol_format)
+	{
+		SOL_MAP_KEYL(&sol_stream, "groups");
+		sol_array_start(&sol_stream);
+		for (i = 0; i < ngroups; i++)
+			sol_integer(&sol_stream, groups[i]);
+		sol_array_end(&sol_stream);
+	}
+	else
+#endif
+	{
+		for (i = 0; i < ngroups; i++)
+			printf("%s%d", (i > 0) ? "," : "", groups[i]);
+	}
 	if (groups != kipp->ki_groups)
 		procstat_freegroups(procstat, groups);
 
-	printf("\n");
+#if defined(SOL_ON)
+	if (sol_format)
+		sol_map_end(&sol_stream);
+	else
+#endif
+		printf("\n");
 }
 
 static const char *

Modified: soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c	Mon Jul  7 10:32:00 2014	(r270543)
+++ soc2014/zkorchev/freebsd_head/usr.bin/procstat/procstat_files.c	Mon Jul  7 10:32:48 2014	(r270544)
@@ -129,7 +129,12 @@
 	char addr[PATH_MAX];
 
 	addr_to_string(ss, addr, sizeof(addr));
-	printf("%s", addr);
+#if defined(SOL_ON)
+	if (sol_format)
+		sol_string(&sol_stream, addr, strlen(addr));
+	else
+#endif
+		printf("%s", addr);
 }
 
 static struct cap_desc {
@@ -265,23 +270,40 @@
 static void
 print_capability(cap_rights_t *rightsp, u_int capwidth)
 {
-	u_int count, i, width;
+	u_int i;
 
-	count = 0;
-	width = 0;
-	for (i = width_capability(rightsp); i < capwidth; i++) {
-		if (i != 0)
-			printf(" ");
-		else
-			printf("-");
+#if defined(SOL_ON)
+	if (sol_format)
+	{
+		sol_array_start(&sol_stream);
+		for (i = 0; i < cap_desc_count; i++)
+			if (cap_rights_is_set(rightsp, cap_desc[i].cd_right))
+				sol_string(&sol_stream,
+					cap_desc[i].cd_desc,
+					strlen(cap_desc[i].cd_desc));
+		sol_array_end(&sol_stream);
 	}
-	for (i = 0; i < cap_desc_count; i++) {
-		if (cap_rights_is_set(rightsp, cap_desc[i].cd_right)) {
-			printf("%s%s", count ? "," : "", cap_desc[i].cd_desc);
-			width += strlen(cap_desc[i].cd_desc);
-			if (count)
-				width++;
-			count++;
+	else
+#endif
+	{
+		u_int count, width;
+
+		count = 0;
+		width = 0;
+		for (i = width_capability(rightsp); i < capwidth; i++) {
+			if (i != 0)
+				printf(" ");
+			else
+				printf("-");
+		}
+		for (i = 0; i < cap_desc_count; i++) {
+			if (cap_rights_is_set(rightsp, cap_desc[i].cd_right)) {
+				printf("%s%s", count ? "," : "", cap_desc[i].cd_desc);
+				width += strlen(cap_desc[i].cd_desc);
+				if (count)
+					width++;
+				count++;
+			}
 		}
 	}
 }
@@ -296,6 +318,7 @@
 	struct vnstat vn;
 	u_int capwidth, width;
 	int error;
+	char flags[9], *flag;
 
 	/*
 	 * To print the header in capability mode, we need to know the width
@@ -315,7 +338,11 @@
 			capwidth = strlen("CAPABILITIES");
 	}
 
+#if defined(SOL_ON)
+	if (!hflag && !sol_format) {
+#else
 	if (!hflag) {
+#endif
 		if (Cflag)
 			printf("%5s %-16s %4s %1s %-9s %-*s "
 			    "%-3s %-12s\n", "PID", "COMM", "FD", "T",
@@ -329,23 +356,53 @@
 
 	if (head == NULL)
 		return;
+#if defined(SOL_ON)
+	if (sol_format) sol_array_start(&sol_stream);
+#endif
 	STAILQ_FOREACH(fst, head, next) {
-		printf("%5d ", kipp->ki_pid);
-		printf("%-16s ", kipp->ki_comm);
-		if (fst->fs_uflags & PS_FST_UFLAG_CTTY)
-			printf(" ctty ");
-		else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
-			printf("  cwd ");
-		else if (fst->fs_uflags & PS_FST_UFLAG_JAIL)
-			printf(" jail ");
-		else if (fst->fs_uflags & PS_FST_UFLAG_RDIR)
-			printf(" root ");
-		else if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
-			printf(" text ");
-		else if (fst->fs_uflags & PS_FST_UFLAG_TRACE)
-			printf("trace ");
+#if defined(SOL_ON)
+		if (sol_format) {
+			sol_map_start(&sol_stream);
+			SOL_MAP_KEYL(&sol_stream, "pid");
+			sol_integer(&sol_stream, kipp->ki_pid);
+			SOL_MAP_KEYL(&sol_stream, "cmd");
+			sol_string(&sol_stream, kipp->ki_comm, strlen(kipp->ki_comm));
+			SOL_MAP_KEYL(&sol_stream, "fd");
+			if (fst->fs_uflags & PS_FST_UFLAG_CTTY)
+				sol_string(&sol_stream, "ctty", 4);
+			else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
+				sol_string(&sol_stream, "cwd", 3);
+			else if (fst->fs_uflags & PS_FST_UFLAG_JAIL)
+				sol_string(&sol_stream, "jail", 4);
+			else if (fst->fs_uflags & PS_FST_UFLAG_RDIR)
+				sol_string(&sol_stream, "root", 4);
+			else if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
+				sol_string(&sol_stream, "text", 4);
+			else if (fst->fs_uflags & PS_FST_UFLAG_TRACE)
+				sol_string(&sol_stream, "trace", 5);
+			else
+				sol_integer(&sol_stream, fst->fs_fd);
+		}
 		else
-			printf("%5d ", fst->fs_fd);
+#endif
+		{
+			printf("%5d ", kipp->ki_pid);
+			printf("%-16s ", kipp->ki_comm);
+			if (fst->fs_uflags & PS_FST_UFLAG_CTTY)
+				printf(" ctty ");
+			else if (fst->fs_uflags & PS_FST_UFLAG_CDIR)
+				printf("  cwd ");
+			else if (fst->fs_uflags & PS_FST_UFLAG_JAIL)
+				printf(" jail ");
+			else if (fst->fs_uflags & PS_FST_UFLAG_RDIR)
+				printf(" root ");
+			else if (fst->fs_uflags & PS_FST_UFLAG_TEXT)
+				printf(" text ");
+			else if (fst->fs_uflags & PS_FST_UFLAG_TRACE)
+				printf("trace ");
+			else
+				printf("%5d ", fst->fs_fd);
+		}
 
 		switch (fst->fs_type) {
 		case PS_FST_TYPE_VNODE:
@@ -394,7 +451,14 @@
 			str = "?";
 			break;
 		}
-		printf("%1s ", str);
+#if defined(SOL_ON)
+		if (sol_format) {
+			SOL_MAP_KEYL(&sol_stream, "type");
+			sol_string(&sol_stream, str, 1);
+		}
+		else
+#endif
+			printf("%1s ", str);
 		if (!Cflag) {
 			str = "-";
 			if (fst->fs_type == PS_FST_TYPE_VNODE) {
@@ -440,38 +504,85 @@
 					break;
 				}
 			}
-			printf("%1s ", str);
+#if defined(SOL_ON)
+			if (sol_format) {
+				SOL_MAP_KEYL(&sol_stream, "vtype");
+				sol_string(&sol_stream, str, 1);
+			}
+			else
+#endif
+				printf("%1s ", str);
 		}
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_READ ? "r" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_WRITE ? "w" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_APPEND ? "a" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_ASYNC ? "s" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_SYNC ? "f" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_NONBLOCK ? "n" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_DIRECT ? "d" : "-");
-		printf("%s", fst->fs_fflags & PS_FST_FFLAG_HASLOCK ? "l" : "-");
+
+		flag = flags;
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_READ ? 'r' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_WRITE ? 'w' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_APPEND ? 'a' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_ASYNC ? 's' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_SYNC ? 'f' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_NONBLOCK ? 'n' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_DIRECT ? 'd' : '-');
+		*flag++ = (fst->fs_fflags & PS_FST_FFLAG_HASLOCK ? 'l' : '-');
+		*flag = 0;
+#if defined(SOL_ON)
+		if (sol_format)
+		{
+			SOL_MAP_KEYL(&sol_stream, "flags");
+			sol_string(&sol_stream, flags, sizeof(flags) - 1);
+		}
+		else
+#endif
+			printf("%s", flags);
+
 		if (!Cflag) {
-			if (fst->fs_ref_count > -1)
-				printf("%3d ", fst->fs_ref_count);
-			else
-				printf("%3c ", '-');
-			if (fst->fs_offset > -1)
-				printf("%7jd ", (intmax_t)fst->fs_offset);
+#if defined(SOL_ON)
+			if (sol_format)
+			{
+				if (fst->fs_ref_count > -1) {
+					SOL_MAP_KEYL(&sol_stream, "ref");
+					sol_integer(&sol_stream, fst->fs_ref_count);
+				}
+				if (fst->fs_offset > -1) {
+					SOL_MAP_KEYL(&sol_stream, "offset");
+					sol_integer(&sol_stream, fst->fs_offset);
+				}
+			}
 			else
-				printf("%7c ", '-');
+#endif
+			{
+				if (fst->fs_ref_count > -1)
+					printf("%3d ", fst->fs_ref_count);
+				else
+					printf("%3c ", '-');
+				if (fst->fs_offset > -1)
+					printf("%7jd ", (intmax_t)fst->fs_offset);
+				else
+					printf("%7c ", '-');
+			}
 		}
 		if (Cflag) {
 			print_capability(&fst->fs_cap_rights, capwidth);
-			printf(" ");
+#if defined(SOL_ON)
+			if (!sol_format)
+#endif
+				printf(" ");
 		}
 		switch (fst->fs_type) {
 		case PS_FST_TYPE_SOCKET:
 			error = procstat_get_socket_info(procstat, fst, &sock, NULL);
 			if (error != 0)
 				break;
-			printf("%-3s ",
-			    protocol_to_string(sock.dom_family,
-			    sock.type, sock.proto));
+#if defined(SOL_ON)
+			if (sol_format) {
+				const char *pro = protocol_to_string(sock.dom_family, sock.type, sock.proto);
+				SOL_MAP_KEYL(&sol_stream, "protocol");
+				sol_string(&sol_stream, pro, strlen(pro));
+			}
+			else
+#endif
+				printf("%-3s ",
+					protocol_to_string(sock.dom_family,
+					sock.type, sock.proto));
 			/*
 			 * While generally we like to print two addresses,
 			 * local and peer, for sockets, it turns out to be
@@ -483,23 +594,63 @@
 				struct sockaddr_un *sun =
 				    (struct sockaddr_un *)&sock.sa_local;
 
-				if (sun->sun_path[0] != 0)
+				if (sun->sun_path[0] != 0) {
+#if defined(SOL_ON)
+					if (sol_format) SOL_MAP_KEYL(&sol_stream, "local");
+#endif
 					print_address(&sock.sa_local);
-				else
+				}
+				else {
+#if defined(SOL_ON)
+					if (sol_format) SOL_MAP_KEYL(&sol_stream, "peer");
+#endif
 					print_address(&sock.sa_peer);
+				}
 			} else {
-				print_address(&sock.sa_local);
-				printf(" ");
-				print_address(&sock.sa_peer);
+#if defined(SOL_ON)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-soc-all mailing list