|
|
researchv10 Norman
#include <stdio.h>
#include "ps.h"
inita()
{
if (drumf == NULL)
drumf = "/dev/drum";
if (memf == NULL)
memf = "/dev/kmem";
if ((drum = open(drumf, 0)) < 0) {
perror(drumf);
exit(1);
}
if ((memory = open(memf, 0)) < 0) {
perror(memf);
exit(1);
}
}
getproca(s, pp)
char *s; register struct proc *pp;
{
register int fd;
char sstr[32];
extern char stack[];
if((fd = open(strcat(strcpy(sstr, "/proc/"), s), 0)) == -1)
return -1;
if(ioctl(fd, PIOCGETPR, pp) < 0) {
close(fd);
fprintf(stderr, "%s %s: /proc ioctl error\n", progname, s);
return -1;
}
return fd;
}
char *
getuareaa(fd, pp, up)
register struct proc *pp; register struct user *up;
{
if (up->u_procp)
return 0;
if (pp->p_stat == SZOMB) {
memset((char *)up, 0, sizeof(*up));
return (0);
}
if (pp->p_flag & SLOAD) {
register ntry = 4;
do
if (memrd(fd, (char *)up, sizeof(*up), UBASE) == sizeof(*up))
return 0;
while (errno == EBUSY && --ntry > 0);
close(fd);
return "/proc read error";
}
if (memrd(drum, (char *)up, sizeof(*up), ctob(pp->p_swaddr)) == sizeof(*up))
return 0;
close(fd);
return "drum read error";
}
getstacka(f, pp, up, stack)
struct proc *pp;
struct user *up;
char *stack;
{
int nstack;
int nspte;
int szpt;
register int i;
struct pte pte[NPTEPG];
nstack = ctob(up->u_ssize);
if (nstack <= 0)
return (0);
if (nstack > NSTACK)
nstack = NSTACK;
if (pp->p_flag & SLOAD) {
lseek(f, UBASE-nstack, 0);
return (read(f, stack, nstack));
} else {
nspte = btoc(nstack);
szpt = clrnd(ctopt(UPAGES+pp->p_tsize+pp->p_dsize+pp->p_ssize));
lseek(drum, ctob(pp->p_swaddr+UPAGES+szpt-1), 0);
if (read(drum, (char *)pte, sizeof(pte)) != sizeof(pte))
return (0);
for (i = nspte-1; i >= 0; stack += NBPG, --i)
rdpage(up, i, &pte[NPTEPG-UPAGES-1-i], stack);
return (nstack);
}
}
List *
getprlista()
{
register List *prlist;
if ((prlist = getdir("/proc", (List *)0)) == 0)
error("can't getdir /proc");
return prlist;
}
kreada(addr, buf, size)
long addr;
char *buf;
int size;
{
return (memrd(memory, buf, size, addr) == size);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.