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