Annotation of researchv10no/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 (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: }

unix.superglobalmegacorp.com

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