From 6429aabbf14be7ce1585fb07b1edb11795dbefc2 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 23 Sep 2006 12:22:11 +0000 Subject: bb_askpass: shorten static password buffer. 256 is way too large. simplify code a bit. --- archival/tar.c | 2 +- libbb/bb_askpass.c | 33 +++++++++++++++------------------ libbb/getopt_ulflags.c | 9 ++++----- miscutils/hdparm.c | 14 +++++++------- 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/archival/tar.c b/archival/tar.c index 5d9e870fa..bfee638b4 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -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) diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c index 65ddd5a24..cf384e52b 100644 --- a/libbb/bb_askpass.c +++ b/libbb/bb_askpass.c @@ -17,8 +17,6 @@ #include #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; } - diff --git a/libbb/getopt_ulflags.c b/libbb/getopt_ulflags.c index e0dc1371f..941e3c96e 100644 --- a/libbb/getopt_ulflags.c +++ b/libbb/getopt_ulflags.c @@ -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 diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index 97f1b5752..b90142362 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c @@ -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) -- cgit v1.2.3