|
|
1.1 ! root 1: #include <signal.h> ! 2: #include <errno.h> ! 3: #include <sgtty.h> ! 4: ! 5: char *pexpw(); ! 6: ! 7: char * ! 8: pexpw(fd, prompt) ! 9: char *prompt; ! 10: { ! 11: int (*sf)(); ! 12: /* struct pexclude x; */ ! 13: struct sgttyb usual, special; ! 14: register char *p; ! 15: register i; ! 16: static char pbuf[9]; ! 17: ! 18: sf = signal(SIGINT, SIG_IGN); ! 19: p = pbuf; ! 20: ! 21: /* if(pex(fd, -1, &x)==0) */ ! 22: { ! 23: /* ! 24: if(x.farpid>0 && x.farcap == 0) { ! 25: p = 0; ! 26: goto out; ! 27: } ! 28: */ ! 29: ioctl(fd, TIOCGETP, &usual); ! 30: special.sg_flags = usual.sg_flags & ~ECHO; ! 31: ioctl(fd, TIOCSETP, &special); ! 32: ! 33: write(fd, prompt, strlen(prompt)); ! 34: for(i=0;;) { ! 35: char c; ! 36: if(read(fd, &c, 1) != 1 || c == '\n') ! 37: break; ! 38: if(i<8) ! 39: pbuf[i++] = c; ! 40: } ! 41: while(i<9) ! 42: pbuf[i++] = 0; ! 43: ioctl(fd, TIOCSETP, &usual); ! 44: } ! 45: /* ! 46: else ! 47: p = 0; ! 48: */ ! 49: out: ! 50: /* unpex(fd, -1); */ ! 51: (void) signal(SIGINT, sf); ! 52: if(p)write(fd,"\n",1); ! 53: return(p); ! 54: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.