]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Avoid trying to open /dev/tty on Win32. Some Win32 systems have
authorBruce Momjian <bruce@momjian.us>
Fri, 3 Mar 2006 23:54:52 +0000 (23:54 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 3 Mar 2006 23:54:52 +0000 (23:54 +0000)
/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

src/bin/psql/command.c
src/port/sprompt.c

index 891421dfddf640b5037b4c02bf9790f2efc0d2ea..a55e468fe0101e534dc352acfe0ba4139167015c 100644 (file)
@@ -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);
index 9a6bee53b9f04842d7a6d34e11fb2f0f580b162f..4b751d8579c7f5aef10fd2c9b8d31163310f9a9c 100644 (file)
@@ -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)