From 474b62b876718890adf24759cc7c15fa5cb7778e Mon Sep 17 00:00:00 2001 From: Allan Jude Date: Sat, 5 Sep 2015 17:02:01 +0000 Subject: Introduce libxo to procstat(1) Reviewed by: rodrigc, bapt Approved by: marcel (mentor) Relnotes: yes Sponsored by: ScaleEngine Inc. Differential Revision: https://reviews.freebsd.org/D2446 --- usr.bin/procstat/procstat_args.c | 51 ++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 17 deletions(-) (limited to 'usr.bin/procstat/procstat_args.c') diff --git a/usr.bin/procstat/procstat_args.c b/usr.bin/procstat/procstat_args.c index 342b60f57e5e6..fd5f3d3b07383 100644 --- a/usr.bin/procstat/procstat_args.c +++ b/usr.bin/procstat/procstat_args.c @@ -1,5 +1,6 @@ /*- * Copyright (c) 2007 Robert N. M. Watson + * Copyright (c) 2015 Allan Jude * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -40,40 +41,56 @@ #include "procstat.h" -static void -do_args(struct procstat *procstat, struct kinfo_proc *kipp, int env) +void +procstat_args(struct procstat *procstat, struct kinfo_proc *kipp) { int i; char **args; if (!hflag) { - printf("%5s %-16s %-53s\n", "PID", "COMM", - env ? "ENVIRONMENT" : "ARGS"); + xo_emit("{T:/%5s %-16s %-53s}\n", "PID", "COMM", "ARGS"); } - args = env ? procstat_getenvv(procstat, kipp, 0) : - procstat_getargv(procstat, kipp, 0); + args = procstat_getargv(procstat, kipp, 0); - printf("%5d %-16s", kipp->ki_pid, kipp->ki_comm); + xo_emit("{k:process_id/%5d/%d} {:command/%-16s/%s}", kipp->ki_pid, + kipp->ki_comm); if (args == NULL) { - printf(" -\n"); + xo_emit(" {d:args/-}\n"); return; } + xo_open_list("arguments"); for (i = 0; args[i] != NULL; i++) - printf(" %s", args[i]); - printf("\n"); -} - -void -procstat_args(struct procstat *procstat, struct kinfo_proc *kipp) -{ - do_args(procstat, kipp, 0); + xo_emit(" {l:args/%s}", args[i]); + xo_close_list("arguments"); + xo_emit("\n"); } void procstat_env(struct procstat *procstat, struct kinfo_proc *kipp) { - do_args(procstat, kipp, 1); + int i; + char **envs; + + if (!hflag) { + xo_emit("{T:/%5s %-16s %-53s}\n", "PID", "COMM", "ENVIRONMENT"); + } + + envs = procstat_getenvv(procstat, kipp, 0); + + xo_emit("{k:process_id/%5d/%d} {:command/%-16s/%s}", kipp->ki_pid, + kipp->ki_comm); + + if (envs == NULL) { + xo_emit(" {d:env/-}\n"); + return; + } + + xo_open_list("environment"); + for (i = 0; envs[i] != NULL; i++) + xo_emit(" {l:env/%s}", envs[i]); + xo_close_list("environment"); + xo_emit("\n"); } -- cgit v1.3