bb_askpass: shorten static password buffer. 256 is way too large.
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 23 Sep 2006 12:22:11 +0000 (12:22 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 23 Sep 2006 12:22:11 +0000 (12:22 -0000)
simplify code a bit.

archival/tar.c
libbb/bb_askpass.c
libbb/getopt_ulflags.c
miscutils/hdparm.c

index 5d9e870..bfee638 100644 (file)
@@ -715,7 +715,7 @@ int tar_main(int argc, char **argv)
                if ((tar_handle->action_header == header_list) ||
                        (tar_handle->action_header == header_verbose_list))
                {
-                               tar_handle->action_header = header_verbose_list;
+                       tar_handle->action_header = header_verbose_list;
                } else tar_handle->action_header = header_list;
        }
        if((opt & CTX_EXTRACT) && tar_handle->action_data != data_extract_to_stdout)
index 65ddd5a..cf384e5 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;
 }
-
index e0dc137..941e3c9 100644 (file)
@@ -104,7 +104,6 @@ const char *bb_opt_complementally
        if they are not specifed on the command line.  For example:
 
        bb_opt_complementally = "abc";
-
        flags = bb_getopt_ulflags(argc, argv, "abcd")
 
        If getopt() finds "-a" on the command line, then
@@ -120,7 +119,6 @@ const char *bb_opt_complementally
        int w_counter = 0;
        bb_opt_complementally = "ww";
        bb_getopt_ulflags(argc, argv, "w", &w_counter);
-
        if(w_counter)
                width = (w_counter == 1) ? 132 : INT_MAX;
        else
@@ -128,6 +126,7 @@ const char *bb_opt_complementally
 
        w_counter is a pointer to an integer. It has to be passed to
        bb_getopt_ulflags() after all other option argument sinks.
+
        For example: accept multiple -v to indicate the level of verbosity
        and for each -b optarg, add optarg to my_b. Finally, if b is given,
        turn off c and vice versa:
@@ -136,8 +135,8 @@ const char *bb_opt_complementally
        int verbose_level = 0;
        bb_opt_complementally = "vv:b::b-c:c-b";
        f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level);
-       if((f & 2))     // -c after -b unsets -b flag
-               while(my_b) { dosomething_with(my_b->data) ; my_b = my_b->link; }
+       if(f & 2)       // -c after -b unsets -b flag
+               while(my_b) { dosomething_with(my_b->data); my_b = my_b->link; }
        if(my_b)        // but llist is stored if -b is specified
                free_llist(my_b);
        if(verbose_level) bb_printf("verbose level is %d\n", verbose_level);
@@ -237,7 +236,7 @@ Special characters:
 
  "--"   A double dash at the beginning of bb_opt_complementally means the
        argv[1] string should always be treated as options, even if it isn't
-       prefixed with a "-".  This is to support the special syntax in applets
+       prefixed with a "-".  This is useful for special syntax in applets
        such as "ar" and "tar":
        tar xvf foo.tar
 
index 97f1b57..b901423 100644 (file)
@@ -2058,13 +2058,13 @@ static void identify_from_stdin(void)
 /* busybox specific stuff */
 static void parse_opts(unsigned long *get, unsigned long *set, unsigned long *value, int min, int max)
 {
-               if (get) {
-                       *get = 1;
-               }
-               if (optarg) {
-                       *set = 1;
-                       *value = bb_xgetlarg(optarg, 10, min, max);
-               }
+       if (get) {
+               *get = 1;
+       }
+       if (optarg) {
+               *set = 1;
+               *value = bb_xgetlarg(optarg, 10, min, max);
+       }
 }
 
 static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value)