version 1.14, 2016/10/10 13:54:47 |
version 1.15, 2016/10/11 13:21:59 |
|
|
RB_ENTRY(args_entry) entry; |
RB_ENTRY(args_entry) entry; |
}; |
}; |
|
|
|
static void args_set(struct args *, u_char, const char *); |
static struct args_entry *args_find(struct args *, u_char); |
static struct args_entry *args_find(struct args *, u_char); |
|
|
static int args_cmp(struct args_entry *, struct args_entry *); |
static int args_cmp(struct args_entry *, struct args_entry *); |
|
|
return (a1->flag - a2->flag); |
return (a1->flag - a2->flag); |
} |
} |
|
|
/* Create an arguments set with no flags. */ |
|
struct args * |
|
args_create(int argc, ...) |
|
{ |
|
struct args *args; |
|
va_list ap; |
|
int i; |
|
|
|
args = xcalloc(1, sizeof *args); |
|
|
|
args->argc = argc; |
|
if (argc == 0) |
|
args->argv = NULL; |
|
else |
|
args->argv = xcalloc(argc, sizeof *args->argv); |
|
|
|
va_start(ap, argc); |
|
for (i = 0; i < argc; i++) |
|
args->argv[i] = xstrdup(va_arg(ap, char *)); |
|
va_end(ap); |
|
|
|
return (args); |
|
} |
|
|
|
/* Find a flag in the arguments tree. */ |
/* Find a flag in the arguments tree. */ |
static struct args_entry * |
static struct args_entry * |
args_find(struct args *args, u_char ch) |
args_find(struct args *args, u_char ch) |
|
|
} |
} |
|
|
/* Set argument value in the arguments tree. */ |
/* Set argument value in the arguments tree. */ |
void |
static void |
args_set(struct args *args, u_char ch, const char *value) |
args_set(struct args *args, u_char ch, const char *value) |
{ |
{ |
struct args_entry *entry; |
struct args_entry *entry; |