|
|
1.1 ! root 1: #include <pagsiz.h> ! 2: #include <sys/types.h> ! 3: #include <a.out.h> ! 4: #include "whoami.h" ! 5: #include "objfmt.h" ! 6: ! 7: /* ! 8: * pxheader - program to sit in front of interpreter code to make shell mods ! 9: * unnecessary to make Pascal obj's look like real programs. ! 10: * ! 11: * This program lives in /usr/lib/px_header ! 12: * Bill Joy UCB February 6, 1978 ! 13: */ ! 14: ! 15: extern errno; ! 16: ! 17: #define BUFSIZ BSIZE ! 18: #define ETXTBSY 26 ! 19: #define ADDR_LC HEADER_BYTES - sizeof (struct exec) - sizeof (struct pxhdr) ! 20: ! 21: main(argc, argv) ! 22: register int argc; ! 23: register char *argv[]; ! 24: { ! 25: register int i, j; ! 26: register unsigned short *ip; ! 27: char *largv[512]; ! 28: int pv[2]; ! 29: ! 30: if (argc > 510) { ! 31: error("Too many arguments.\n"); ! 32: exit(1); ! 33: } ! 34: largv[0] = argv[0]; ! 35: largv[1] = "-"; ! 36: for (i = 1; i < argc; i++) ! 37: largv[i + 1] = argv[i]; ! 38: largv[argc + 1] = 0; ! 39: pipe(pv); ! 40: i = fork(); ! 41: if (i == -1) ! 42: error("Try again.\n"); ! 43: if (i == 0) { ! 44: close(pv[0]); ! 45: ip = (unsigned short *) (ADDR_LC); ! 46: i = ((struct pxhdr *)(ADDR_LC))->objsize + sizeof(struct pxhdr); ! 47: while (i != 0) { ! 48: j = (i > 0 && i < BUFSIZ) ? i : BUFSIZ; ! 49: write(pv[1], ip, j); ! 50: ip += BUFSIZ / sizeof ( unsigned short ); ! 51: i -= j; ! 52: } ! 53: exit(1); ! 54: } ! 55: close(pv[1]); ! 56: if (pv[0] != 3) { ! 57: close(3); ! 58: dup(pv[0]); ! 59: close(pv[0]); ! 60: } ! 61: for (;;) { ! 62: execv(PX_INTRP, largv); ! 63: if (errno != ETXTBSY) ! 64: break; ! 65: sleep(2); ! 66: } ! 67: error("Px not found.\n"); ! 68: } ! 69: ! 70: error(cp) ! 71: register char *cp; ! 72: { ! 73: register int i; ! 74: register char *dp; ! 75: ! 76: dp = cp; ! 77: i = 0; ! 78: while (*dp++) ! 79: i++; ! 80: write(2, cp, i); ! 81: exit(1); ! 82: } ! 83: ! 84: exit(i) ! 85: { ! 86: _exit(i); ! 87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.