Annotation of researchv10no/cmd/ps/proca.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include "ps.h"
                      3: 
                      4: inita()
                      5: {
                      6:        if (drumf == NULL)
                      7:                drumf = "/dev/drum";
                      8:        if (memf == NULL)
                      9:                memf = "/dev/kmem";
                     10:        if ((drum = open(drumf, 0)) < 0) {
                     11:                perror(drumf);
                     12:                exit(1);
                     13:        }
                     14:        if ((memory = open(memf, 0)) < 0) {
                     15:                perror(memf);
                     16:                exit(1);
                     17:        }
                     18: }
                     19: 
                     20: getproca(s, pp)
                     21: char *s; register struct proc *pp;
                     22: {
                     23:        register int fd;
                     24:        char sstr[32];
                     25:        extern char stack[];
                     26: 
                     27:        if((fd = open(strcat(strcpy(sstr, "/proc/"), s), 0)) == -1)
                     28:                return -1;
                     29:        if(ioctl(fd, PIOCGETPR, pp) < 0) {
                     30:                close(fd);
                     31:                fprintf(stderr, "%s %s: /proc ioctl error\n", progname, s);
                     32:                return -1;
                     33:        }
                     34:        return fd;
                     35: }
                     36: 
                     37: char *
                     38: getuareaa(fd, pp, up)
                     39: register struct proc *pp; register struct user *up;
                     40: {
                     41:        if (up->u_procp)
                     42:                return 0;
                     43:        if (pp->p_stat == SZOMB) {
                     44:                memset((char *)up, 0, sizeof(*up));
                     45:                return (0);
                     46:        }
                     47:        if (pp->p_flag & SLOAD) {
                     48:                register ntry = 4;
                     49:                do
                     50:                        if (memrd(fd, (char *)up, sizeof(*up), UBASE) == sizeof(*up))
                     51:                                return 0;
                     52:                while (errno == EBUSY && --ntry > 0);
                     53:                close(fd);
                     54:                return "/proc read error";
                     55:        }
                     56:        if (memrd(drum, (char *)up, sizeof(*up), ctob(pp->p_swaddr)) == sizeof(*up))
                     57:                return 0;
                     58:        close(fd);
                     59:        return "drum read error";
                     60: }
                     61: 
                     62: getstacka(f, pp, up, stack)
                     63: struct proc *pp;
                     64: struct user *up;
                     65: char *stack;
                     66: {
                     67:        int nstack;
                     68:        int nspte;
                     69:        int szpt;
                     70:        register int i;
                     71:        struct pte pte[NPTEPG];
                     72: 
                     73:        nstack = ctob(up->u_ssize);
                     74:        if (nstack <= 0)
                     75:                return (0);
                     76:        if (nstack > NSTACK)
                     77:                nstack = NSTACK;
                     78:        if (pp->p_flag & SLOAD) {
                     79:                lseek(f, UBASE-nstack, 0);
                     80:                return (read(f, stack, nstack));
                     81:        } else {
                     82:                nspte = btoc(nstack);
                     83:                szpt = clrnd(ctopt(UPAGES+pp->p_tsize+pp->p_dsize+pp->p_ssize));
                     84:                lseek(drum, ctob(pp->p_swaddr+UPAGES+szpt-1), 0);
                     85:                if (read(drum, (char *)pte, sizeof(pte)) != sizeof(pte))
                     86:                        return (0);
                     87:                for (i = nspte-1; i >= 0; stack += NBPG, --i)
                     88:                        rdpage(up, i, &pte[NPTEPG-UPAGES-1-i], stack);
                     89:                return (nstack);
                     90:        }
                     91: }
                     92: 
                     93: List *
                     94: getprlista()
                     95: {
                     96:        register List *prlist;
                     97: 
                     98:        if ((prlist = getdir("/proc", (List *)0)) == 0)
                     99:                error("can't getdir /proc");
                    100:        return prlist;
                    101: }
                    102: 
                    103: kreada(addr, buf, size)
                    104: long addr;
                    105: char *buf;
                    106: int size;
                    107: {
                    108: 
                    109:        return (memrd(memory, buf, size, addr) == size);
                    110: }

unix.superglobalmegacorp.com

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