1 #define _POSIX_SOURCE 2 #define _RESEARCH_SOURCE 3 #include <stdio.h> 4 #include <signal.h> 5 #include <libv.h> 6 7 char * 8 getpass(char *prompt) 9 { 10 register char *p; 11 register c; 12 FILE *fi; 13 static char pbuf[9]; 14 void (*sig)(int); 15 16 if ((fi = fopen("/dev/cons", "r")) == NULL) 17 fi = stdin; 18 else 19 setbuf(fi, (char *)NULL); 20 sig = signal(SIGINT, SIG_IGN); 21 tty_echooff(fileno(fi)); 22 fprintf(stderr, "%s", prompt); fflush(stderr); 23 for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) { 24 if (p < &pbuf[8]) 25 *p++ = c; 26 } 27 *p = '\0'; 28 fprintf(stderr, "\n"); fflush(stderr); 29 tty_echoon(fileno(fi)); 30 signal(SIGINT, sig); 31 if (fi != stdin) 32 fclose(fi); 33 return(pbuf); 34 } 35