1: /*
2: * Copyright (c) 1985 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)getpass.c 5.4 (Berkeley) 3/7/86";
9: #endif not lint
10:
11: #include <stdio.h>
12: #include <signal.h>
13: #include <sgtty.h>
14:
15: static struct sgttyb ttyb;
16: static int flags;
17: static FILE *fi;
18:
19: static intfix()
20: {
21: ttyb.sg_flags = flags;
22: if (fi != NULL)
23: (void) stty(fileno(fi), &ttyb);
24: exit(SIGINT);
25: }
26:
27: char *
28: mygetpass(prompt)
29: char *prompt;
30: {
31: register char *p;
32: register c;
33: static char pbuf[50+1];
34: int (*signal())();
35: int (*sig)();
36:
37: if ((fi = fopen("/dev/tty", "r")) == NULL)
38: fi = stdin;
39: else
40: setbuf(fi, (char *)NULL);
41: sig = signal(SIGINT, intfix);
42: (void) gtty(fileno(fi), &ttyb);
43: flags = ttyb.sg_flags;
44: ttyb.sg_flags &= ~ECHO;
45: (void) stty(fileno(fi), &ttyb);
46: fprintf(stderr, "%s", prompt); (void) fflush(stderr);
47: for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
48: if (p < &pbuf[sizeof(pbuf)-1])
49: *p++ = c;
50: }
51: *p = '\0';
52: fprintf(stderr, "\n"); (void) fflush(stderr);
53: ttyb.sg_flags = flags;
54: (void) stty(fileno(fi), &ttyb);
55: (void) signal(SIGINT, sig);
56: if (fi != stdin)
57: (void) fclose(fi);
58: return(pbuf);
59: }
Defined functions
Defined variables
flags
defined in line
16; used 3 times
sccsid
defined in line
8;
never used
ttyb
defined in line
15; used 8 times