Exemple #1
0
static void sigint_handler(int signum)
{
    (void)signum;
    restore_tty_state();
    report(stderr, GT_("\nCaught SIGINT... bailing out.\n"));
    exit(1);
}
Exemple #2
0
/*{{{  static void user_stop_signal (int sig)*/
static void user_stop_signal (int sig)
{
	/* Advanced Programming in the UNIX Environment, Stevens; P321 */

	/* set continue handler for after stop */
	signal (SIGCONT, user_cont_signal);

	if (stdin_is_tty && occam_uses_keyboard ()) {
		restore_tty_state ();
	}

	/* kill_kbdio (); */

	/* Do the default SIGTSTP action - stop this process */
	kill (getpid(), SIGSTOP);

	#if defined(SIGNAL_TYPE_SYSV)
	/* Re-establish signal handler */
	signal (SIGTSTP, user_stop_signal);
	#endif
}
Exemple #3
0
char *fm_getpassword(char *prompt)
{
    register char *p;
    register int c;
    FILE *fi;
    static char pbuf[INPUT_BUF_SIZE];
    SIGHANDLERTYPE sig = 0;	/* initialization pacifies -Wall */

    int istty = isatty(0);

    /* get the file descriptor for the actual input device if it's a tty */
    if (istty)
    {
	if ((fi = fdopen(open("/dev/tty", 2), "r")) == NULL)
	    fi = stdin;
	else
	    setbuf(fi, (char *)NULL);
    }
    else
	fi = stdin;

    /* store descriptor for the tty */
    ttyfd = fileno(fi);

    if (istty)
    {
	/* preserve tty state before turning off echo */
	save_tty_state();

	/* now that we have the current tty state, we can catch SIGINT and  
	   exit gracefully */
	sig = set_signal_handler(SIGINT, sigint_handler);

	/* turn off echo on the tty */
	disable_tty_echo();

	/* display the prompt and get the input string */
	fprintf(stderr, "%s", prompt);
    }

    for (p = pbuf; (c = getc(fi))!='\n' && c!=EOF;)
    {
	if (p < &pbuf[INPUT_BUF_SIZE - 1])
	    *p++ = c;
    }
    *p = '\0';

    /* write a newline so cursor won't appear to hang */
    if (fi != stdin)
	fprintf(stderr, "\n");

    if (istty)
    {
	/* restore previous state of the tty */
	restore_tty_state();

	/* restore previous state of SIGINT */
	set_signal_handler(SIGINT, sig);
    }
    if (fi != stdin)
	fclose(fi);	/* not checking should be safe, file mode was "r" */

    return(pbuf);
}