Date: Mon, 7 Jul 2014 10:32:49 GMT From: zkorchev@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r270544 - soc2014/zkorchev/freebsd_head/usr.bin/procstat Message-ID: <201407071032.s67AWnCx089557@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407071032.s67AWnCx089557>