simplify code a bit.
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)
#include <sys/ioctl.h>
#include "libbb.h"
-#define PWD_BUFFER_SIZE 256
-
/* do nothing signal handler */
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);
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) {
}
tcsetattr(STDIN_FILENO, TCSANOW, &old);
- fputs("\n", stdout);
+ puts("");
fflush(stdout);
return ret;
}
-
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
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
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:
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);
"--" 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
/* 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)