home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libc / stdio / getpass.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  725 b   |  41 lines

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <sgtty.h>
  4.  
  5. char *
  6. getpass(prompt)
  7. char *prompt;
  8. {
  9.     struct sgttyb ttyb;
  10.     int flags;
  11.     register char *p;
  12.     register c;
  13.     FILE *fi;
  14.     static char pbuf[9];
  15.     int (*signal())();
  16.     int (*sig)();
  17.  
  18.     if ((fi = fopen("/dev/tty", "r")) == NULL)
  19.         fi = stdin;
  20.     else
  21.         setbuf(fi, (char *)NULL);
  22.     sig = signal(SIGINT, SIG_IGN);
  23.     gtty(fileno(fi), &ttyb);
  24.     flags = ttyb.sg_flags;
  25.     ttyb.sg_flags &= ~ECHO;
  26.     stty(fileno(fi), &ttyb);
  27.     fprintf(stderr, prompt);
  28.     for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
  29.         if (p < &pbuf[8])
  30.             *p++ = c;
  31.     }
  32.     *p = '\0';
  33.     fprintf(stderr, "\n");
  34.     ttyb.sg_flags = flags;
  35.     stty(fileno(fi), &ttyb);
  36.     signal(SIGINT, sig);
  37.     if (fi != stdin)
  38.         fclose(fi);
  39.     return(pbuf);
  40. }
  41.