Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-3-0]: src/usr.sbin/pstat Pull up following revision(s) (requested...
details: https://anonhg.NetBSD.org/src/rev/c8140f13b9e6
branches: netbsd-3-0
changeset: 579523:c8140f13b9e6
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Fri Mar 27 10:44:03 2009 +0000
description:
Pull up following revision(s) (requested by mrg in ticket #2000):
usr.sbin/pstat/pstat.c: revision 1.113
convert getfiles() to use KERN_FILE2 sysctl.
now it can survive "struct file" changing, as is upcoming.
diffstat:
usr.sbin/pstat/pstat.c | 61 +++++++++++++++++++++++++------------------------
1 files changed, 31 insertions(+), 30 deletions(-)
diffs (120 lines):
diff -r 4023dba9fd8f -r c8140f13b9e6 usr.sbin/pstat/pstat.c
--- a/usr.sbin/pstat/pstat.c Fri Mar 27 10:43:35 2009 +0000
+++ b/usr.sbin/pstat/pstat.c Fri Mar 27 10:44:03 2009 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pstat.c,v 1.88 2004/12/18 08:43:35 christos Exp $ */
+/* $NetBSD: pstat.c,v 1.88.4.1 2009/03/27 10:44:03 msaitoh Exp $ */
/*-
* Copyright (c) 1980, 1991, 1993, 1994
@@ -39,7 +39,7 @@
#if 0
static char sccsid[] = "@(#)pstat.c 8.16 (Berkeley) 5/9/95";
#else
-__RCSID("$NetBSD: pstat.c,v 1.88 2004/12/18 08:43:35 christos Exp $");
+__RCSID("$NetBSD: pstat.c,v 1.88.4.1 2009/03/27 10:44:03 msaitoh Exp $");
#endif
#endif /* not lint */
@@ -878,8 +878,7 @@
void
filemode()
{
- struct file *fp;
- struct file *addr;
+ struct kinfo_file *ki;
char flags[sizeof(filemode_flags) / sizeof(filemode_flags[0])];
char *buf, *offset;
int len, maxfile, nfile, ovflw;
@@ -893,37 +892,34 @@
if (getfiles(&buf, &len, &offset) == -1)
return;
/*
- * Getfiles returns in malloc'd memory a pointer to the first file
- * structure, and then an array of file structs (whose addresses are
- * derivable from the previous entry).
+ * Getfiles returns in malloc'd memory to an array of kinfo_file2
+ * structures.
*/
- addr = ((struct filelist *)offset)->lh_first;
- fp = (struct file *)(offset + sizeof(struct filelist));
- nfile = (len - sizeof(struct filelist)) / sizeof(struct file);
+ nfile = len / sizeof(struct kinfo_file);
(void)printf("%d/%d open files\n", nfile, maxfile);
(void)printf("%*s%s%*s TYPE FLG CNT MSG %*s%s%*s USE IFLG OFFSET\n",
(PTRSTRWIDTH - 4) / 2, "", " LOC", (PTRSTRWIDTH - 4) / 2, "",
(PTRSTRWIDTH - 4) / 2, "", "DATA", (PTRSTRWIDTH - 4) / 2, "");
- for (; (char *)fp < offset + len; addr = fp->f_list.le_next, fp++) {
- if ((unsigned)fp->f_type > sizeof(dtypes) / sizeof(dtypes[0]))
+ for (ki = (struct kinfo_file *)offset; nfile--; ki++) {
+ if ((unsigned)ki->ki_ftype >= sizeof(dtypes) / sizeof(dtypes[0]))
continue;
ovflw = 0;
- (void)getflags(filemode_flags, flags, fp->f_flag);
- PRWORD(ovflw, "%*lx", PTRSTRWIDTH, 0, (long)addr);
- PRWORD(ovflw, " %-*s", 9, 1, dtypes[fp->f_type]);
+ (void)getflags(filemode_flags, flags, ki->ki_flag);
+ PRWORD(ovflw, "%*lx", PTRSTRWIDTH, 0, (long)ki->ki_fileaddr);
+ PRWORD(ovflw, " %-*s", 9, 1, dtypes[ki->ki_ftype]);
PRWORD(ovflw, " %*s", 6, 1, flags);
- PRWORD(ovflw, " %*d", 5, 1, fp->f_count);
- PRWORD(ovflw, " %*d", 5, 1, fp->f_msgcount);
- PRWORD(ovflw, " %*lx", PTRSTRWIDTH + 1, 2, (long)fp->f_data);
- PRWORD(ovflw, " %*d", 5, 1, fp->f_usecount);
- PRWORD(ovflw, " %*x", 5, 1, fp->f_iflags);
- if (fp->f_offset < 0)
+ PRWORD(ovflw, " %*d", 5, 1, ki->ki_count);
+ PRWORD(ovflw, " %*d", 5, 1, ki->ki_msgcount);
+ PRWORD(ovflw, " %*lx", PTRSTRWIDTH + 1, 2, (long)ki->ki_fdata);
+ PRWORD(ovflw, " %*d", 5, 1, ki->ki_usecount);
+ PRWORD(ovflw, " %*x", 5, 1, ki->ki_iflags);
+ if (ki->ki_foffset < 0)
PRWORD(ovflw, " %-*lld\n", PTRSTRWIDTH + 1, 2,
- (long long)fp->f_offset);
+ (long long)ki->ki_foffset);
else
PRWORD(ovflw, " %-*lld\n", PTRSTRWIDTH + 1, 2,
- (long long)fp->f_offset);
+ (long long)ki->ki_foffset);
}
free(buf);
}
@@ -935,7 +931,7 @@
char **aoffset;
{
size_t len;
- int mib[2];
+ int mib[6];
char *buf;
size_t offset;
@@ -947,17 +943,22 @@
errx(1, "files on dead kernel, not implemented");
mib[0] = CTL_KERN;
- mib[1] = KERN_FILE;
- if (sysctl(mib, 2, NULL, &len, NULL, 0) == -1) {
- warn("sysctl: KERN_FILE");
+ mib[1] = KERN_FILE2;
+ mib[2] = KERN_FILE_BYFILE;
+ mib[3] = 0;
+ mib[4] = sizeof(struct kinfo_file);
+ mib[5] = 0;
+ if (sysctl(mib, 6, NULL, &len, NULL, 0) == -1) {
+ warn("sysctl: KERN_FILE2");
return (-1);
}
- /* We need to align (struct file *) in the buffer. */
+ /* We need to align (struct kinfo_file *) in the buffer. */
offset = len % sizeof(off_t);
+ mib[5] = len / sizeof(struct kinfo_file);
if ((buf = malloc(len + offset)) == NULL)
err(1, "malloc");
- if (sysctl(mib, 2, buf + offset, &len, NULL, 0) == -1) {
- warn("sysctl: KERN_FILE");
+ if (sysctl(mib, 6, buf + offset, &len, NULL, 0) == -1) {
+ warn("sysctl: 2nd KERN_FILE2");
return (-1);
}
*abuf = buf;
Home |
Main Index |
Thread Index |
Old Index