Annotation of researchv10no/cmd/ops/fdprint.c, revision 1.1.1.1

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 (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:                if (f.f_offset.hi == 0)
                     35:                        cp += sprintf(cp, " at %d: ", f.f_offset.lo);
                     36:                else
                     37:                        cp += sprintf(cp, " at 0x%x%.8x: ", f.f_offset.hi, f.f_offset.lo);
                     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; char *lookdir();
                     48: 
                     49:        switch (ip->i_mode & IFMT) {
                     50:        case IFCHR:
                     51:        case IFBLK:
                     52:                if (p = lookdir(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:        if (ip->i_dev == 0 && ip->i_fstyp == 2)
                     67:                ip->i_dev = makedev(255, 255);
                     68:        if (p = getfs(ip->i_dev))
                     69:                cp += sprintf(cp, "%s\n", p);
                     70:        else
                     71:                cp += sprintf(cp, "(%d/%d)\n",
                     72:                        major(ip->i_dev), minor(ip->i_dev));
                     73:        return cp;
                     74: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.