Date: Thu, 16 Jul 2009 13:26:04 +0000 (UTC) From: Stanislav Sedov <stas@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r195718 - projects/libprocstat/usr.bin/fstat Message-ID: <200907161326.n6GDQ4VT030396@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: stas Date: Thu Jul 16 13:26:03 2009 New Revision: 195718 URL: http://svn.freebsd.org/changeset/base/195718 Log: - Add device name extraction. Modified: projects/libprocstat/usr.bin/fstat/common.c projects/libprocstat/usr.bin/fstat/common.h projects/libprocstat/usr.bin/fstat/fstat.c projects/libprocstat/usr.bin/fstat/libprocstat.c Modified: projects/libprocstat/usr.bin/fstat/common.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/common.c Thu Jul 16 13:03:05 2009 (r195717) +++ projects/libprocstat/usr.bin/fstat/common.c Thu Jul 16 13:26:03 2009 (r195718) @@ -76,6 +76,7 @@ __FBSDID("$FreeBSD$"); #include <netinet/ip.h> #include <netinet/in_pcb.h> +#include <assert.h> #include <ctype.h> #include <err.h> #include <fcntl.h> @@ -118,14 +119,16 @@ kvm_read_all(kvm_t *kd, unsigned long ad return (error == (ssize_t)(nbytes)); } -char * -kdevtoname(kvm_t *kd, struct cdev *dev) +int +kdevtoname(kvm_t *kd, struct cdev *dev, char *buf) { struct cdev si; + assert(buf); if (!kvm_read_all(kd, (unsigned long)dev, &si, sizeof(si))) - return (NULL); - return (strdup(si.__si_namebuf)); + return (1); + strlcpy(buf, si.__si_namebuf, SPECNAMELEN + 1); + return (0); } int @@ -228,6 +231,7 @@ dev2udev(kvm_t *kd, struct cdev *dev) { struct cdev_priv priv; + assert(kd); if (kvm_read_all(kd, (unsigned long)cdev2priv(dev), &priv, sizeof(priv))) { return ((dev_t)priv.cdp_inode); Modified: projects/libprocstat/usr.bin/fstat/common.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/common.h Thu Jul 16 13:03:05 2009 (r195717) +++ projects/libprocstat/usr.bin/fstat/common.h Thu Jul 16 13:26:03 2009 (r195718) @@ -47,6 +47,7 @@ struct filestat { struct vnstat { dev_t vn_dev; + char vn_devname[SPECNAMELEN + 1]; int vn_type; long vn_fsid; long vn_fileid; @@ -57,6 +58,7 @@ struct vnstat { struct ptsstat { dev_t dev; + char devname[SPECNAMELEN + 1]; }; struct pipestat { @@ -84,7 +86,7 @@ extern int vflg; dev_t dev2udev(kvm_t *kd, struct cdev *dev); void dprintf(FILE *file, const char *fmt, ...); -char *kdevtoname(kvm_t *kd, struct cdev *dev); +int kdevtoname(kvm_t *kd, struct cdev *dev, char *); int kvm_read_all(kvm_t *kd, unsigned long addr, void *buf, size_t nbytes); Modified: projects/libprocstat/usr.bin/fstat/fstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/fstat.c Thu Jul 16 13:03:05 2009 (r195717) +++ projects/libprocstat/usr.bin/fstat/fstat.c Thu Jul 16 13:26:03 2009 (r195718) @@ -485,11 +485,11 @@ print_pts_info(struct procstat *procstat return; } printf("* pseudo-terminal master "); - if (nflg) { + if (nflg || !*pts.devname) { printf("%10d,%-2d", major(pts.dev), minor(pts.dev)); - } /* else { - printf("%10s", pts.name); - } */ + } else { + printf("%10s", pts.devname); + } print_access_flags(fst->fs_fflags); } @@ -497,7 +497,6 @@ static void print_vnode_info(struct procstat *procstat, struct filestat *fst) { struct vnstat vn; - char *name; const char *badtype; char errbuf[_POSIX2_LINE_MAX]; char mode[15]; @@ -532,12 +531,10 @@ print_vnode_info(struct procstat *procst (void)printf(" %6ld %10s", vn.vn_fileid, mode); if (vn.vn_type == PS_FST_VTYPE_VBLK || vn.vn_type == PS_FST_VTYPE_VCHR) { - name = NULL; -// name = fst->vnode.dev.name; - if (nflg || !name) + if (nflg || !*vn.vn_devname) printf(" %2d,%-2d", major(vn.vn_dev), minor(vn.vn_dev)); else { - printf(" %6s", name); + printf(" %6s", vn.vn_devname); } } else printf(" %6lu", vn.vn_size); Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Thu Jul 16 13:03:05 2009 (r195717) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Thu Jul 16 13:26:03 2009 (r195718) @@ -558,7 +558,10 @@ procstat_get_pts_info_kvm(kvm_t *kd, str warnx("can't read tty at %p", (void *)ttyp); goto fail; } - pts->dev = dev2udev(kd, tty.t_dev); + if (tty.t_dev != NULL) { + pts->dev = dev2udev(kd, tty.t_dev); + (void)kdevtoname(kd, tty.t_dev, pts->devname); + } return (0); fail: @@ -642,8 +645,10 @@ procstat_get_vnode_info_kvm(kvm_t *kd, s return (1); } vn->mntdir = getmnton(kd, vnode.v_mount); - if (vnode.v_rdev != NULL) + if (vnode.v_rdev != NULL) { vn->vn_dev = dev2udev(kd, vnode.v_rdev); + (void)kdevtoname(kd, vnode.v_rdev, vn->vn_devname); + } return (0); fail:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907161326.n6GDQ4VT030396>