Date: Mon, 1 Dec 2008 01:45:52 +0000 (UTC) From: Peter Wemm <peter@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185501 - user/peter/kinfo/usr.bin/procstat Message-ID: <200812010145.mB11jqxe008388@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: peter Date: Mon Dec 1 01:45:52 2008 New Revision: 185501 URL: http://svn.freebsd.org/changeset/base/185501 Log: Use libutil wrapper for kinfo_get{file|vmmap}() Modified: user/peter/kinfo/usr.bin/procstat/Makefile user/peter/kinfo/usr.bin/procstat/procstat_files.c user/peter/kinfo/usr.bin/procstat/procstat_vm.c Modified: user/peter/kinfo/usr.bin/procstat/Makefile ============================================================================== --- user/peter/kinfo/usr.bin/procstat/Makefile Mon Dec 1 01:34:18 2008 (r185500) +++ user/peter/kinfo/usr.bin/procstat/Makefile Mon Dec 1 01:45:52 2008 (r185501) @@ -12,4 +12,8 @@ SRCS= procstat.c \ procstat_threads.c \ procstat_vm.c +LDADD+= -lutil +DPADD+= ${LIBUTIL} +WARNS?= 4 + .include <bsd.prog.mk> Modified: user/peter/kinfo/usr.bin/procstat/procstat_files.c ============================================================================== --- user/peter/kinfo/usr.bin/procstat/procstat_files.c Mon Dec 1 01:34:18 2008 (r185500) +++ user/peter/kinfo/usr.bin/procstat/procstat_files.c Mon Dec 1 01:45:52 2008 (r185501) @@ -41,6 +41,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <libutil.h> #include "procstat.h" @@ -134,42 +135,18 @@ void procstat_files(pid_t pid, struct kinfo_proc *kipp) { struct kinfo_file *freep, *kif; - int error, name[4]; - unsigned int i; + int i, cnt; const char *str; - size_t len; if (!hflag) printf("%5s %-16s %4s %1s %1s %-8s %3s %7s %-3s %-12s\n", "PID", "COMM", "FD", "T", "V", "FLAGS", "REF", "OFFSET", "PRO", "NAME"); - name[0] = CTL_KERN; - name[1] = KERN_PROC; - name[2] = KERN_PROC_FILEDESC; - name[3] = pid; - - error = sysctl(name, 4, NULL, &len, NULL, 0); - if (error < 0 && errno != ESRCH && errno != EPERM) { - warn("sysctl: kern.proc.filedesc: %d", pid); - return; - } - if (error < 0) - return; - - freep = kif = malloc(len); - if (kif == NULL) - err(-1, "malloc"); - - if (sysctl(name, 4, kif, &len, NULL, 0) < 0) { - warn("sysctl: kern.proc.filedesc %d", pid); - free(freep); - return; - } - - for (i = 0; i < len / sizeof(*kif); i++, kif++) { - if (kif->kf_structsize != sizeof(*kif)) - errx(-1, "kinfo_file mismatch"); + freep = kinfo_getfile(pid, &cnt); + for (i = 0; i < cnt; i++) { + kif = &freep[i]; + printf("%5d ", pid); printf("%-16s ", kipp->ki_comm); switch (kif->kf_fd) { Modified: user/peter/kinfo/usr.bin/procstat/procstat_vm.c ============================================================================== --- user/peter/kinfo/usr.bin/procstat/procstat_vm.c Mon Dec 1 01:34:18 2008 (r185500) +++ user/peter/kinfo/usr.bin/procstat/procstat_vm.c Mon Dec 1 01:45:52 2008 (r185501) @@ -34,6 +34,7 @@ #include <errno.h> #include <stdio.h> #include <stdlib.h> +#include <libutil.h> #include "procstat.h" @@ -41,10 +42,9 @@ void procstat_vm(pid_t pid, struct kinfo_proc *kipp __unused) { struct kinfo_vmentry *freep, *kve; - int error, name[4], ptrwidth; - unsigned int i; + int ptrwidth; + int i, cnt; const char *str; - size_t len; ptrwidth = 2*sizeof(void *) + 2; if (!hflag) @@ -52,38 +52,9 @@ procstat_vm(pid_t pid, struct kinfo_proc "PID", ptrwidth, "START", ptrwidth, "END", "PRT", "RES", "PRES", "REF", "SHD", "FL", "TP", "PATH"); - name[0] = CTL_KERN; - name[1] = KERN_PROC; - name[2] = KERN_PROC_VMMAP; - name[3] = pid; - - len = 0; - error = sysctl(name, 4, NULL, &len, NULL, 0); - if (error < 0 && errno != ESRCH && errno != EPERM) { - warn("sysctl: kern.proc.vmmap: %d", pid); - return; - } - if (error < 0) - return; - - /* - * Especially if running procstat -sv, we may need room for more - * mappings when printing than were present when we queried, so pad - * out the allocation a bit. - */ - len += sizeof(*kve) * 3; - freep = kve = malloc(len); - if (kve == NULL) - err(-1, "malloc"); - if (sysctl(name, 4, kve, &len, NULL, 0) < 0) { - warn("sysctl: kern.proc.vmmap: %d", pid); - free(freep); - return; - } - - for (i = 0; i < (len / sizeof(*kve)); i++, kve++) { - if (kve->kve_structsize != sizeof(*kve)) - errx(-1, "kinfo_vmentry structure mismatch"); + freep = kinfo_getvmmap(pid, &cnt); + for (i = 0; i < cnt; i++) { + kve = &freep[i]; printf("%5d ", pid); printf("%*p ", ptrwidth, kve->kve_start); printf("%*p ", ptrwidth, kve->kve_end);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812010145.mB11jqxe008388>