From 5aa91c158d8e9f88f6b5790c23b86010f52151f2 Mon Sep 17 00:00:00 2001 From: Tom London Date: Fri, 19 Jan 1979 23:55:17 -0500 Subject: [PATCH] Bell 32V development Work on file usr/src/libc/stdio/getpass.c Co-Authored-By: John Reiser Synthesized-from: 32v --- usr/src/libc/stdio/getpass.c | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 usr/src/libc/stdio/getpass.c diff --git a/usr/src/libc/stdio/getpass.c b/usr/src/libc/stdio/getpass.c new file mode 100644 index 0000000000..51bf36b72a --- /dev/null +++ b/usr/src/libc/stdio/getpass.c @@ -0,0 +1,40 @@ +#include +#include +#include + +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); +} -- 2.20.1