summaryrefslogtreecommitdiffstats
path: root/arguments.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2019-07-09 17:02:26 +0100
committerThomas Adam <thomas@xteddy.org>2019-07-09 17:02:26 +0100
commit98ef369b27b631b7893446fbdf7c9d6ce9c1b43a (patch)
tree279d31f5e5c58725740969330041d5294a8828c4 /arguments.c
parent177599efb7d6477db8ce2bc6da82b16cb0327954 (diff)
parentfc2016dbb665f01e795a89632a1bb74294bfc4e1 (diff)
Merge branch 'obsd-master'
Diffstat (limited to 'arguments.c')
-rw-r--r--arguments.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/arguments.c b/arguments.c
index f7b6cbe1..026272af 100644
--- a/arguments.c
+++ b/arguments.c
@@ -37,6 +37,7 @@ TAILQ_HEAD(args_values, args_value);
struct args_entry {
u_char flag;
struct args_values values;
+ u_int count;
RB_ENTRY(args_entry) entry;
};
@@ -173,6 +174,7 @@ args_print(struct args *args)
size_t len;
char *buf;
int i;
+ u_int j;
struct args_entry *entry;
struct args_value *value;
@@ -186,7 +188,8 @@ args_print(struct args *args)
if (*buf == '\0')
args_print_add(&buf, &len, "-");
- args_print_add(&buf, &len, "%c", entry->flag);
+ for (j = 0; j < entry->count; j++)
+ args_print_add(&buf, &len, "%c", entry->flag);
}
/* Then the flags with arguments. */
@@ -243,7 +246,12 @@ args_escape(const char *s)
int
args_has(struct args *args, u_char ch)
{
- return (args_find(args, ch) != NULL);
+ struct args_entry *entry;
+
+ entry = args_find(args, ch);
+ if (entry == NULL)
+ return (0);
+ return (entry->count);
}
/* Set argument value in the arguments tree. */
@@ -257,9 +265,11 @@ args_set(struct args *args, u_char ch, const char *s)
if (entry == NULL) {
entry = xcalloc(1, sizeof *entry);
entry->flag = ch;
+ entry->count = 1;
TAILQ_INIT(&entry->values);
RB_INSERT(args_tree, &args->tree, entry);
- }
+ } else
+ entry->count++;
if (s != NULL) {
value = xcalloc(1, sizeof *value);