Add strings option.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2821 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -91,12 +91,16 @@ arg_printusage (struct getargs *args,
|
||||
len += 2 + strlen(args[i].long_name);
|
||||
len += print_arg (1, &args[i]);
|
||||
putc (']', stderr);
|
||||
if(args[i].type == arg_strings)
|
||||
fprintf (stderr, "...");
|
||||
}
|
||||
if (args[i].short_name) {
|
||||
len += 2;
|
||||
fprintf (stderr, " [-%c", args[i].short_name);
|
||||
len += print_arg (0, &args[i]);
|
||||
putc (']', stderr);
|
||||
if(args[i].type == arg_strings)
|
||||
fprintf (stderr, "...");
|
||||
}
|
||||
if (args[i].long_name && args[i].short_name)
|
||||
len += 4;
|
||||
@@ -136,6 +140,14 @@ arg_printusage (struct getargs *args,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
add_string(getarg_strings *s, char *value)
|
||||
{
|
||||
s->strings = realloc(s->strings, (s->num_strings + 1) * sizeof(*s->strings));
|
||||
s->strings[s->num_strings] = value;
|
||||
s->num_strings++;
|
||||
}
|
||||
|
||||
static int
|
||||
arg_match_long(struct getargs *args, size_t num_args,
|
||||
char *argv)
|
||||
@@ -206,6 +218,11 @@ arg_match_long(struct getargs *args, size_t num_args,
|
||||
*(char**)current->value = optarg + 1;
|
||||
return 0;
|
||||
}
|
||||
case arg_strings:
|
||||
{
|
||||
add_string((getarg_strings*)current->value, optarg + 1);
|
||||
return 0;
|
||||
}
|
||||
case arg_flag:
|
||||
{
|
||||
int *flag = current->value;
|
||||
@@ -279,6 +296,9 @@ getarg(struct getargs *args, size_t num_args,
|
||||
}else if(args[k].type == arg_string){
|
||||
*(char**)args[k].value = optarg;
|
||||
goto out;
|
||||
}else if(args[k].type == arg_strings){
|
||||
add_string((getarg_strings*)args[k].value, optarg);
|
||||
goto out;
|
||||
}
|
||||
return ARG_ERR_BAD_ARG;
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@
|
||||
struct getargs{
|
||||
const char *long_name;
|
||||
char short_name;
|
||||
enum { arg_integer, arg_string, arg_flag, arg_negative_flag } type;
|
||||
enum { arg_integer, arg_string, arg_flag, arg_negative_flag, arg_strings } type;
|
||||
void *value;
|
||||
const char *help;
|
||||
const char *arg_help;
|
||||
@@ -58,6 +58,11 @@ enum {
|
||||
ARG_ERR_NO_ARG
|
||||
};
|
||||
|
||||
typedef struct getarg_strings {
|
||||
int num_strings;
|
||||
char **strings;
|
||||
} getarg_strings;
|
||||
|
||||
int getarg(struct getargs *args, size_t num_args,
|
||||
int argc, char **argv, int *optind);
|
||||
|
||||
|
Reference in New Issue
Block a user