|
|
researchv9-SUN3(old)
#include "ps.h"
#include <sys/text.h>
#include <sys/inode.h>
#include <sys/file.h>
char *
fdprint(cp, pp, up)
char *cp; register struct proc *pp; register struct user *up;
{
register j, k;
struct text x; struct file f; struct inode i;
char ident[NOFILE], prefix[8];
if (fflag <= 1)
sprintf(prefix, "%5d ", pp->p_pid);
else
strcpy(prefix, " ");
if (Kread(pp->p_textp, &x) && Kread(x.x_iptr, &i))
cp += sprintf(cp, "%sprog: ", prefix), cp = iprint(cp, &i);
if (Kread(up->u_cdir, &i))
cp += sprintf(cp, "%scdir: ", prefix), cp = iprint(cp, &i);
if (Kread(up->u_rdir, &i))
cp += sprintf(cp, "%srdir: ", prefix), cp = iprint(cp, &i);
for (k = 0; k < NOFILE; k++)
ident[k] = 0;
for (k = 0; k < NOFILE; k++) if (!ident[k]) {
if (!Kread(up->u_ofile[k], &f) || !Kread(f.f_inode, &i))
continue;
cp += sprintf(cp, "%sfd %d", prefix, k);
for (j=k+1; j<NOFILE; j++)
if (up->u_ofile[j] == up->u_ofile[k])
cp += sprintf(cp, ",%d", j), ++ident[j];
cp += sprintf(cp, " at %d: ", f.f_offset);
cp = iprint(cp, &i);
}
return cp;
}
char *
iprint(cp, ip)
register char *cp; register struct inode *ip;
{
register char *p; char *lookdir();
switch (ip->i_mode & IFMT) {
case IFCHR:
case IFBLK:
if (p = lookdir(ip->i_number))
cp += sprintf(cp, "%s\n", p);
else
cp += sprintf(cp, "(%d/%d)\n",
major(ip->i_un.i_rdev), minor(ip->i_un.i_rdev));
return cp;
case IFREG:
cp += sprintf(cp, ip->i_sptr ? "stream" : "file"); break;
case IFDIR:
cp += sprintf(cp, "dir"); break;
default:
cp += sprintf(cp, "[%o06]", ip->i_mode); break;
}
cp += sprintf(cp, " %d on ", ip->i_number);
if (ip->i_dev == 0 && ip->i_fstyp == 2)
ip->i_dev = makedev(255, 255);
if (p = getfs(ip->i_dev))
cp += sprintf(cp, "%s\n", p);
else
cp += sprintf(cp, "(%d/%d)\n",
major(ip->i_dev), minor(ip->i_dev));
return cp;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.