svn commit: r195718 - projects/libprocstat/usr.bin/fstat

Stanislav Sedov stas at FreeBSD.org
Thu Jul 16 13:26:06 UTC 2009


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:


More information about the svn-src-projects mailing list