Workaround for a Win95 console bug triggered by the password read stuff.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 5 Mar 1999 01:07:04 +0000 (01:07 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 5 Mar 1999 01:07:04 +0000 (01:07 +0000)
CHANGES
crypto/des/read_pwd.c

diff --git a/CHANGES b/CHANGES
index f6800dcf1d1f1ad646bdc5b6b70fb227f2931668..5346d4001e941024013b28a6c3d517d46c5865a2 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,7 +5,12 @@
 
  Changes between 0.9.1c and 0.9.2
 
-  *) Add text documentation for the BUFFER functions.
+  *) Add text documentation for the BUFFER functions. Also added a work around
+     to a Win95 console bug. This was triggered by the password read stuff: the
+     last character typed gets carried over to the next fread(). If you were 
+     generating a new cert request using 'req' for example then the last
+     character of the passphrase would be CR which would then enter the first
+     field as blank.
      [Steve Henson]
 
   *) Added the new `Includes OpenSSL Cryptography Software' button as
index 3041ab2dfe8ebaa1ea80888969fc5b590cc374d5..edfa456a43905ae5a20f8a4546041fec8edb1d90 100644 (file)
 #include <graph.h>
 #endif
 
+#if defined(WIN32) && !defined(WINNT)
+#define WIN_CONSOLE_BUG
+#endif
+
+
 /* 06-Apr-92 Luke Brennan    Support for VMS */
 #include "des_locl.h"
 #include <signal.h>
 #include <setjmp.h>
 #include <errno.h>
 
+#ifdef WIN_CONSOLE_BUG
+#include <windows.h>
+#include <wincon.h>
+#endif
+
+
 /* There are 5 types of terminal interface supported,
  * TERMIO, TERMIOS, VMS, MSDOS and SGTTY
  */
@@ -462,6 +473,18 @@ FILE *tty;
                        break;
                        }
                }
+#ifdef WIN_CONSOLE_BUG
+/* Win95 has several evil console bugs: one of these is that the
+ * last character read using getch() is passed to the next read: this is
+ * usually a CR so this can be trouble. No STDIO fix seems to work but
+ * flushing the console appears to do the trick.
+ */
+                {
+                        HANDLE inh;
+                        inh = GetStdHandle(STD_INPUT_HANDLE);
+                        FlushConsoleInputBuffer(inh);
+                }
+#endif
        return(strlen(buf));
        }
 #endif