summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian2006-03-03 23:54:52 +0000
committerBruce Momjian2006-03-03 23:54:52 +0000
commitb7a870ccc7c3d5b174806b0305bbd57c56724298 (patch)
tree831080b6c9c5ab530d5fc37aa6ca41ca4e10410f /src
parent77e7b8923c4f5d6b2691e528dcdc80fd44e9751f (diff)
Avoid trying to open /dev/tty on Win32. Some Win32 systems have
/dev/tty, but it isn't a device file and doesn't work as expected. This fixes a known bug where psql does not prompt for a password on some Win32 systems. Backpatch to 8.0.X too. Robert Kinberg
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/command.c6
-rw-r--r--src/port/sprompt.c16
2 files changed, 16 insertions, 6 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 891421dfddf..a55e468fe01 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.139.4.1 2005/09/20 18:59:15 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.139.4.2 2006/03/03 23:54:51 momjian Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@@ -654,7 +654,11 @@ exec_command(const char *cmd,
expand_tilde(&fname);
/* This scrolls off the screen when using /dev/tty */
+#ifndef WIN32
success = saveHistory(fname ? fname : "/dev/tty");
+#else
+ success = saveHistory(fname ? fname : stderr);
+#endif
if (success && !quiet && fname)
printf(gettext("Wrote history to file \"%s\".\n"), fname);
diff --git a/src/port/sprompt.c b/src/port/sprompt.c
index 9a6bee53b9f..4b751d8579c 100644
--- a/src/port/sprompt.c
+++ b/src/port/sprompt.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/port/sprompt.c,v 1.10 2004/12/31 22:03:53 pgsql Exp $
+ * $PostgreSQL: pgsql/src/port/sprompt.c,v 1.10.4.1 2006/03/03 23:54:52 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -40,8 +40,8 @@ simple_prompt(const char *prompt, int maxlen, bool echo)
{
int length;
char *destination;
- FILE *termin,
- *termout;
+ FILE *termin = NULL,
+ *termout = NULL;
#ifdef HAVE_TERMIOS_H
struct termios t_orig,
@@ -64,8 +64,14 @@ simple_prompt(const char *prompt, int maxlen, bool echo)
* 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");
+#ifndef WIN32
+ /*
+ * Some win32 platforms actually have a /dev/tty file, but it isn't
+ * a device file, and it doesn't work as expected, so we avoid trying.
+ */
+ termin = fopen("/dev/tty", "r");
+ termout = fopen("/dev/tty", "w");
+#endif
if (!termin || !termout)
{
if (termin)