aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archival/tar.c2
-rw-r--r--libbb/bb_askpass.c33
-rw-r--r--libbb/getopt_ulflags.c9
-rw-r--r--miscutils/hdparm.c14
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)
715 if ((tar_handle->action_header == header_list) || 715 if ((tar_handle->action_header == header_list) ||
716 (tar_handle->action_header == header_verbose_list)) 716 (tar_handle->action_header == header_verbose_list))
717 { 717 {
718 tar_handle->action_header = header_verbose_list; 718 tar_handle->action_header = header_verbose_list;
719 } else tar_handle->action_header = header_list; 719 } else tar_handle->action_header = header_list;
720 } 720 }
721 if((opt & CTX_EXTRACT) && tar_handle->action_data != data_extract_to_stdout) 721 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 @@
17#include <sys/ioctl.h> 17#include <sys/ioctl.h>
18 18
19#include "libbb.h" 19#include "libbb.h"
20#define PWD_BUFFER_SIZE 256
21
22 20
23/* do nothing signal handler */ 21/* do nothing signal handler */
24static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) 22static void askpass_timeout(int ATTRIBUTE_UNUSED ignore)
@@ -27,18 +25,17 @@ static void askpass_timeout(int ATTRIBUTE_UNUSED ignore)
27 25
28char *bb_askpass(int timeout, const char * prompt) 26char *bb_askpass(int timeout, const char * prompt)
29{ 27{
28 static char passwd[64];
29
30 char *ret; 30 char *ret;
31 int i, size; 31 int i;
32 struct sigaction sa; 32 struct sigaction sa;
33 struct termios old, new; 33 struct termios old, new;
34 static char passwd[PWD_BUFFER_SIZE];
35 34
36 tcgetattr(STDIN_FILENO, &old); 35 tcgetattr(STDIN_FILENO, &old);
37 tcflush(STDIN_FILENO, TCIFLUSH); 36 tcflush(STDIN_FILENO, TCIFLUSH);
38 37
39 size = sizeof(passwd); 38 memset(passwd, 0, sizeof(passwd));
40 ret = passwd;
41 memset(passwd, 0, size);
42 39
43 fputs(prompt, stdout); 40 fputs(prompt, stdout);
44 fflush(stdout); 41 fflush(stdout);
@@ -55,15 +52,16 @@ char *bb_askpass(int timeout, const char * prompt)
55 alarm(timeout); 52 alarm(timeout);
56 } 53 }
57 54
58 if (read(STDIN_FILENO, passwd, size-1) <= 0) { 55 ret = NULL;
59 ret = NULL; 56 if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) {
60 } else { 57 ret = passwd;
61 for(i = 0; i < size && passwd[i]; i++) { 58 i = 0;
62 if (passwd[i]== '\r' || passwd[i] == '\n') { 59 /* Last byte is guaranteed to be 0
63 passwd[i]= 0; 60 (read did not overwrite it) */
64 break; 61 do {
65 } 62 if (passwd[i] == '\r' || passwd[i] == '\n')
66 } 63 passwd[i] = 0;
64 } while (passwd[i++]);
67 } 65 }
68 66
69 if (timeout) { 67 if (timeout) {
@@ -71,8 +69,7 @@ char *bb_askpass(int timeout, const char * prompt)
71 } 69 }
72 70
73 tcsetattr(STDIN_FILENO, TCSANOW, &old); 71 tcsetattr(STDIN_FILENO, TCSANOW, &old);
74 fputs("\n", stdout); 72 puts("");
75 fflush(stdout); 73 fflush(stdout);
76 return ret; 74 return ret;
77} 75}
78
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
104 if they are not specifed on the command line. For example: 104 if they are not specifed on the command line. For example:
105 105
106 bb_opt_complementally = "abc"; 106 bb_opt_complementally = "abc";
107
108 flags = bb_getopt_ulflags(argc, argv, "abcd") 107 flags = bb_getopt_ulflags(argc, argv, "abcd")
109 108
110 If getopt() finds "-a" on the command line, then 109 If getopt() finds "-a" on the command line, then
@@ -120,7 +119,6 @@ const char *bb_opt_complementally
120 int w_counter = 0; 119 int w_counter = 0;
121 bb_opt_complementally = "ww"; 120 bb_opt_complementally = "ww";
122 bb_getopt_ulflags(argc, argv, "w", &w_counter); 121 bb_getopt_ulflags(argc, argv, "w", &w_counter);
123
124 if(w_counter) 122 if(w_counter)
125 width = (w_counter == 1) ? 132 : INT_MAX; 123 width = (w_counter == 1) ? 132 : INT_MAX;
126 else 124 else
@@ -128,6 +126,7 @@ const char *bb_opt_complementally
128 126
129 w_counter is a pointer to an integer. It has to be passed to 127 w_counter is a pointer to an integer. It has to be passed to
130 bb_getopt_ulflags() after all other option argument sinks. 128 bb_getopt_ulflags() after all other option argument sinks.
129
131 For example: accept multiple -v to indicate the level of verbosity 130 For example: accept multiple -v to indicate the level of verbosity
132 and for each -b optarg, add optarg to my_b. Finally, if b is given, 131 and for each -b optarg, add optarg to my_b. Finally, if b is given,
133 turn off c and vice versa: 132 turn off c and vice versa:
@@ -136,8 +135,8 @@ const char *bb_opt_complementally
136 int verbose_level = 0; 135 int verbose_level = 0;
137 bb_opt_complementally = "vv:b::b-c:c-b"; 136 bb_opt_complementally = "vv:b::b-c:c-b";
138 f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level); 137 f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level);
139 if((f & 2)) // -c after -b unsets -b flag 138 if(f & 2) // -c after -b unsets -b flag
140 while(my_b) { dosomething_with(my_b->data) ; my_b = my_b->link; } 139 while(my_b) { dosomething_with(my_b->data); my_b = my_b->link; }
141 if(my_b) // but llist is stored if -b is specified 140 if(my_b) // but llist is stored if -b is specified
142 free_llist(my_b); 141 free_llist(my_b);
143 if(verbose_level) bb_printf("verbose level is %d\n", verbose_level); 142 if(verbose_level) bb_printf("verbose level is %d\n", verbose_level);
@@ -237,7 +236,7 @@ Special characters:
237 236
238 "--" A double dash at the beginning of bb_opt_complementally means the 237 "--" A double dash at the beginning of bb_opt_complementally means the
239 argv[1] string should always be treated as options, even if it isn't 238 argv[1] string should always be treated as options, even if it isn't
240 prefixed with a "-". This is to support the special syntax in applets 239 prefixed with a "-". This is useful for special syntax in applets
241 such as "ar" and "tar": 240 such as "ar" and "tar":
242 tar xvf foo.tar 241 tar xvf foo.tar
243 242
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)
2058/* busybox specific stuff */ 2058/* busybox specific stuff */
2059static void parse_opts(unsigned long *get, unsigned long *set, unsigned long *value, int min, int max) 2059static void parse_opts(unsigned long *get, unsigned long *set, unsigned long *value, int min, int max)
2060{ 2060{
2061 if (get) { 2061 if (get) {
2062 *get = 1; 2062 *get = 1;
2063 } 2063 }
2064 if (optarg) { 2064 if (optarg) {
2065 *set = 1; 2065 *set = 1;
2066 *value = bb_xgetlarg(optarg, 10, min, max); 2066 *value = bb_xgetlarg(optarg, 10, min, max);
2067 } 2067 }
2068} 2068}
2069 2069
2070static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value) 2070static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value)