diff options
-rw-r--r-- | archival/tar.c | 2 | ||||
-rw-r--r-- | libbb/bb_askpass.c | 33 | ||||
-rw-r--r-- | libbb/getopt_ulflags.c | 9 | ||||
-rw-r--r-- | 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) | |||
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 */ |
24 | static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) | 22 | static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) |
@@ -27,18 +25,17 @@ static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) | |||
27 | 25 | ||
28 | char *bb_askpass(int timeout, const char * prompt) | 26 | char *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 */ |
2059 | static void parse_opts(unsigned long *get, unsigned long *set, unsigned long *value, int min, int max) | 2059 | static 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 | ||
2070 | static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value) | 2070 | static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value) |