From 6fe5b769d6e013febf722788cb890c3af9701a02 Mon Sep 17 00:00:00 2001
From: Manuel Novoa III <mjn3@codepoet.org>
Date: Tue, 9 Apr 2002 17:00:04 +0000
Subject: Only set no buffering if we opened the file.  Also, don't bother
 restoring buffering since we will close the file in that case anyway.

---
 libc/unistd/getpass.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

(limited to 'libc/unistd')

diff --git a/libc/unistd/getpass.c b/libc/unistd/getpass.c
index 8ebc985df..ac2159036 100644
--- a/libc/unistd/getpass.c
+++ b/libc/unistd/getpass.c
@@ -63,8 +63,11 @@ getpass (prompt)
       /* Tricky, tricky. */
       t.c_lflag &= ~(ECHO|ISIG);
       tty_changed = (tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &t) == 0);
-      /* Disable buffering for input FILE to prevent the buffering from flushing. */
-      setvbuf(in, NULL, _IOLBF, 0);
+      if (in != stdin) {
+	/* Disable buffering for read/write FILE to prevent problems with
+	 * fseek and buffering for read/write auto-transitioning. */
+	setvbuf(in, NULL, _IONBF, 0);
+      }
     }
   else
     tty_changed = 0;
@@ -93,8 +96,6 @@ getpass (prompt)
   /* Restore the original setting.  */
   if (tty_changed) {
     (void) tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &s);
-    /* Re-enable buffering. */
-    setlinebuf(in);
   }
 
   if (in != stdin)
-- 
cgit v1.2.3