|
|
1.1 root 1: #include "ps.h"
2: #include <sys/text.h>
3: #include <sys/inode.h>
4: #include <sys/file.h>
5:
6: char *
7: fdprint(cp, pp, up)
8: char *cp; register struct proc *pp; register struct user *up;
9: {
10: register j, k;
11: struct text x; struct file f; struct inode i;
12: char ident[NOFILE], prefix[8];
13:
14: if (fflag <= 1)
15: sprintf(prefix, "%5d ", pp->p_pid);
16: else
17: strcpy(prefix, " ");
18:
19: if (Kread(pp->p_textp, &x) && Kread(x.x_iptr, &i))
20: cp += sprintf(cp, "%sprog: ", prefix), cp = iprint(cp, &i);
21: if (Kread(up->u_cdir, &i))
22: cp += sprintf(cp, "%scdir: ", prefix), cp = iprint(cp, &i);
23: if (up->u_rdir && Kread(up->u_rdir, &i))
24: cp += sprintf(cp, "%srdir: ", prefix), cp = iprint(cp, &i);
25: for (k = 0; k < NOFILE; k++)
26: ident[k] = 0;
27: for (k = 0; k < NOFILE; k++) if (!ident[k]) {
28: if (!Kread(up->u_ofile[k], &f) || !Kread(f.f_inode, &i))
29: continue;
30: cp += sprintf(cp, "%sfd %d", prefix, k);
31: for (j=k+1; j<NOFILE; j++)
32: if (up->u_ofile[j] == up->u_ofile[k])
33: cp += sprintf(cp, ",%d", j), ++ident[j];
34: /* offsets are now Long. There should be a better way to do this! */
35: cp += sprintf(cp, " at %.0f: ", ((double)4294967296.0)*f.f_offset.hi
36: + ((double)2147483648.0)*(f.f_offset.lo>>31)
37: + (f.f_offset.lo&0x7fffffff));
38: cp = iprint(cp, &i);
39: }
40: return cp;
41: }
42:
43: char *
44: iprint(cp, ip)
45: register char *cp; register struct inode *ip;
46: {
47: register char *p;
48:
49: switch (ip->i_mode & IFMT) {
50: case IFCHR:
51: case IFBLK:
52: if (p = lookdir((int)ip->i_number))
53: cp += sprintf(cp, "%s\n", p);
54: else
55: cp += sprintf(cp, "(%d/%d)\n",
56: major(ip->i_un.i_rdev), minor(ip->i_un.i_rdev));
57: return cp;
58: case IFREG:
59: cp += sprintf(cp, ip->i_sptr ? "stream" : "file"); break;
60: case IFDIR:
61: cp += sprintf(cp, "dir"); break;
62: default:
63: cp += sprintf(cp, "[%o06]", ip->i_mode); break;
64: }
65: cp += sprintf(cp, " %d on ", ip->i_number);
66: /*
67: if (ip->i_dev == 0 && ip->i_fstyp == 2)
68: ip->i_dev = makedev(255, 255);
69: */
70: if (p = getfs(ip))
71: cp += sprintf(cp, "%s\n", p);
72: else
73: cp += sprintf(cp, "(%d/%d)\n",
74: major(ip->i_dev), minor(ip->i_dev));
75: return cp;
76: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.