diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-07-06 20:12:30 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-07-06 20:12:30 +0000 |
commit | 7015111a19eba481f3abf3f8d6149cd417bf6de5 (patch) | |
tree | aa7dc3eaf73cc2961bf15f1f2a9ead5c219e1ee9 /src/bin/psql/common.c | |
parent | d66f172f4b75df4fccae02612a181f1161e0865d (diff) | |
download | postgresql-7015111a19eba481f3abf3f8d6149cd417bf6de5.tar.gz postgresql-7015111a19eba481f3abf3f8d6149cd417bf6de5.zip |
Move simple_prompt() into its own file to be shared with psql and pg_dump.
Diffstat (limited to 'src/bin/psql/common.c')
-rw-r--r-- | src/bin/psql/common.c | 116 |
1 files changed, 2 insertions, 114 deletions
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index bd2c87fa7f6..1b1e4626609 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -3,7 +3,7 @@ * * Copyright 2000 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.40 2002/03/06 06:10:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.41 2002/07/06 20:12:30 momjian Exp $ */ #include "postgres_fe.h" @@ -12,9 +12,6 @@ #include <errno.h> #include <stdarg.h> #include <sys/time.h> -#ifdef HAVE_TERMIOS_H -#include <termios.h> -#endif #ifndef HAVE_STRDUP #include <strdup.h> #endif @@ -37,6 +34,7 @@ #include "print.h" #include "mainloop.h" +extern bool prompt_state; /* * "Safe" wrapper around strdup() @@ -159,115 +157,6 @@ NoticeProcessor(void *arg, const char *message) /* - * simple_prompt - * - * Generalized function especially intended for reading in usernames and - * password interactively. Reads from /dev/tty or stdin/stderr. - * - * prompt: The prompt to print - * maxlen: How many characters to accept - * echo: Set to false if you want to hide what is entered (for passwords) - * - * Returns a malloc()'ed string with the input (w/o trailing newline). - */ -static bool prompt_state = false; - -char * -simple_prompt(const char *prompt, int maxlen, bool echo) -{ - int length; - char *destination; - FILE *termin, - *termout; - -#ifdef HAVE_TERMIOS_H - struct termios t_orig, - t; -#endif - - destination = (char *) malloc(maxlen + 2); - if (!destination) - return NULL; - - prompt_state = true; /* disable SIGINT */ - - /* - * Do not try to collapse these into one "w+" mode file. Doesn't work - * on some platforms (eg, HPUX 10.20). - */ - termin = fopen("/dev/tty", "r"); - termout = fopen("/dev/tty", "w"); - if (!termin || !termout) - { - if (termin) - fclose(termin); - if (termout) - fclose(termout); - termin = stdin; - termout = stderr; - } - -#ifdef HAVE_TERMIOS_H - if (!echo) - { - tcgetattr(fileno(termin), &t); - t_orig = t; - t.c_lflag &= ~ECHO; - tcsetattr(fileno(termin), TCSAFLUSH, &t); - } -#endif - - if (prompt) - { - fputs(gettext(prompt), termout); - fflush(termout); - } - - if (fgets(destination, maxlen, termin) == NULL) - destination[0] = '\0'; - - length = strlen(destination); - if (length > 0 && destination[length - 1] != '\n') - { - /* eat rest of the line */ - char buf[128]; - int buflen; - - do - { - if (fgets(buf, sizeof(buf), termin) == NULL) - break; - buflen = strlen(buf); - } while (buflen > 0 && buf[buflen - 1] != '\n'); - } - - if (length > 0 && destination[length - 1] == '\n') - /* remove trailing newline */ - destination[length - 1] = '\0'; - -#ifdef HAVE_TERMIOS_H - if (!echo) - { - tcsetattr(fileno(termin), TCSAFLUSH, &t_orig); - fputs("\n", termout); - fflush(termout); - } -#endif - - if (termin != stdin) - { - fclose(termin); - fclose(termout); - } - - prompt_state = false; /* SIGINT okay again */ - - return destination; -} - - - -/* * Code to support query cancellation * * Before we start a query, we enable a SIGINT signal catcher that sends a @@ -276,7 +165,6 @@ simple_prompt(const char *prompt, int maxlen, bool echo) * so. We use write() to print to stdout because it's better to use simple * facilities in a signal handler. */ - PGconn *cancelConn; volatile bool cancel_pressed; |