#if CONFIG_xxx -> #if ENABLE_xxx
[oweals/busybox.git] / libbb / bb_askpass.c
index 65ddd5a24a2650847d2c12d181d0c1d39040e7a4..cf384e52b9d1915b2f2275048c2b4443f898bfb5 100644 (file)
@@ -17,8 +17,6 @@
 #include <sys/ioctl.h>
 
 #include "libbb.h"
-#define PWD_BUFFER_SIZE 256
-
 
 /* do nothing signal handler */
 static void askpass_timeout(int ATTRIBUTE_UNUSED ignore)
@@ -27,18 +25,17 @@ static void askpass_timeout(int ATTRIBUTE_UNUSED ignore)
 
 char *bb_askpass(int timeout, const char * prompt)
 {
+       static char passwd[64];
+
        char *ret;
-       int i, size;
+       int i;
        struct sigaction sa;
        struct termios old, new;
-       static char passwd[PWD_BUFFER_SIZE];
 
        tcgetattr(STDIN_FILENO, &old);
        tcflush(STDIN_FILENO, TCIFLUSH);
 
-       size = sizeof(passwd);
-       ret = passwd;
-       memset(passwd, 0, size);
+       memset(passwd, 0, sizeof(passwd));
 
        fputs(prompt, stdout);
        fflush(stdout);
@@ -55,15 +52,16 @@ char *bb_askpass(int timeout, const char * prompt)
                alarm(timeout);
        }
 
-       if (read(STDIN_FILENO, passwd, size-1) <= 0) {
-               ret = NULL;
-       } else {
-               for(i = 0; i < size && passwd[i]; i++) {
-                       if (passwd[i]== '\r' || passwd[i] == '\n') {
-                               passwd[i]= 0;
-                               break;
-                       }
-               }
+       ret = NULL;
+       if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) {
+               ret = passwd;
+               i = 0;
+               /* Last byte is guaranteed to be 0
+                  (read did not overwrite it) */
+               do {
+                       if (passwd[i] == '\r' || passwd[i] == '\n')
+                               passwd[i] = 0;
+               } while (passwd[i++]);
        }
 
        if (timeout) {
@@ -71,8 +69,7 @@ char *bb_askpass(int timeout, const char * prompt)
        }
 
        tcsetattr(STDIN_FILENO, TCSANOW, &old);
-       fputs("\n", stdout);
+       puts("");
        fflush(stdout);
        return ret;
 }
-