|
|
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.