SysIII/usr/src/lib/libc/vax/stdio/getpass.c

Compare this file to the similar file:
Show the results in this format:

/*LINTLIBRARY*/
#include <stdio.h>
#include <signal.h>
#include <termio.h>

char *
getpass(prompt)
char *prompt;
{
	struct termio ttyb;
	unsigned short flags;
	register char *p;
	register c;
	FILE *fi;
	static char pbuf[9];
	int (*signal())();
	int (*sig)();

	if((fi = fopen("/dev/tty", "r")) == NULL)
		return((char *) NULL);
	else
		setbuf(fi, (char *)NULL);
	sig = signal(SIGINT, SIG_IGN);
	ioctl(fileno(fi), TCGETA, &ttyb);
	flags = ttyb.c_lflag;
	ttyb.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
	ioctl(fileno(fi), TCSETAF, &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.c_lflag = flags;
	ioctl(fileno(fi), TCSETA, &ttyb);
	signal(SIGINT, sig);
	if(fi != stdin)
		fclose(fi);
	return(pbuf);
}