}
switch (opt->arg_type) {
case LLS_STRING:
- if (lor->given > 0 && !multiple)
+ if (!opt->values && lor->given > 0 && !multiple)
free(lor->value[idx].string_val);
if (opt->values) {
ret = check_enum_arg(la->arg, opt, errctx);
if (!lor->value[j].string_val) {
for (; j >= 0; j--)
free(lor->value[j].string_val);
+ free(lor->value);
goto free_options;
}
p += strlen(lor->value[j].string_val) + 1;
*lprp = lpr;
return 1;
free_options:
- for (; i >= 0; i--) {
+ for (i--; i >= 0; i--) {
const struct lls_option *opt = cmd->options + i;
struct lls_opt_result *lor = lpr->opt_result + i;
unsigned num_vals = (opt->flags & LLS_MULTIPLE)? lor->given : 1;