Annotation of researchv9/cmd/ps/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:                cp += sprintf(cp, " at %d: ", f.f_offset);
                     35:                cp = iprint(cp, &i);
                     36:        }
                     37:        return cp;
                     38: }
                     39: 
                     40: char *
                     41: iprint(cp, ip)
                     42: register char *cp; register struct inode *ip;
                     43: {
                     44:        register char *p; char *lookdir();
                     45: 
                     46:        switch (ip->i_mode & IFMT) {
                     47:        case IFCHR:
                     48:        case IFBLK:
                     49:                if (p = lookdir(ip->i_number))
                     50:                        cp += sprintf(cp, "%s\n", p);
                     51:                else
                     52:                        cp += sprintf(cp, "(%d/%d)\n",
                     53:                                major(ip->i_un.i_rdev), minor(ip->i_un.i_rdev));
                     54:                return cp;
                     55:        case IFREG:
                     56:                cp += sprintf(cp, ip->i_sptr ? "stream" : "file"); break;
                     57:        case IFDIR:
                     58:                cp += sprintf(cp, "dir"); break;
                     59:        default:
                     60:                cp += sprintf(cp, "[%o06]", ip->i_mode); break;
                     61:        }
                     62:        cp += sprintf(cp, " %d on ", ip->i_number);
                     63:        if (ip->i_dev == 0 && ip->i_fstyp == 2)
                     64:                ip->i_dev = makedev(255, 255);
                     65:        if (p = getfs(ip->i_dev))
                     66:                cp += sprintf(cp, "%s\n", p);
                     67:        else
                     68:                cp += sprintf(cp, "(%d/%d)\n",
                     69:                        major(ip->i_dev), minor(ip->i_dev));
                     70:        return cp;
                     71: }

unix.superglobalmegacorp.com

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