Bell 32V development
authorTom London <tbl@research.uucp>
Sat, 20 Jan 1979 04:55:17 +0000 (23:55 -0500)
committerTom London <tbl@research.uucp>
Sat, 20 Jan 1979 04:55:17 +0000 (23:55 -0500)
Work on file usr/src/libc/stdio/getpass.c

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/libc/stdio/getpass.c [new file with mode: 0644]

diff --git a/usr/src/libc/stdio/getpass.c b/usr/src/libc/stdio/getpass.c
new file mode 100644 (file)
index 0000000..51bf36b
--- /dev/null
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <signal.h>
+#include <sgtty.h>
+
+char *
+getpass(prompt)
+char *prompt;
+{
+       struct sgttyb ttyb;
+       int flags;
+       register char *p;
+       register c;
+       FILE *fi;
+       static char pbuf[9];
+       int (*signal())();
+       int (*sig)();
+
+       if ((fi = fopen("/dev/tty", "r")) == NULL)
+               fi = stdin;
+       else
+               setbuf(fi, (char *)NULL);
+       sig = signal(SIGINT, SIG_IGN);
+       gtty(fileno(fi), &ttyb);
+       flags = ttyb.sg_flags;
+       ttyb.sg_flags &= ~ECHO;
+       stty(fileno(fi), &ttyb);
+       fprintf(stderr, prompt);
+       for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
+               if (p < &pbuf[8])
+                       *p++ = c;
+       }
+       *p = '\0';
+       fprintf(stderr, "\n");
+       ttyb.sg_flags = flags;
+       stty(fileno(fi), &ttyb);
+       signal(SIGINT, sig);
+       if (fi != stdin)
+               fclose(fi);
+       return(pbuf);
+}