X-Git-Url: http://git.tuebingen.mpg.de/?p=lopsub.git;a=blobdiff_plain;f=lopsub.c;h=d495663408d12fbe85f471a1ba406c3b5c64dcaf;hp=55ea6ac56253e0705e551780271acb9be859ea25;hb=2d0464872cec02b53f5bb5ca2a037cb764641c1f;hpb=a1a679403ccafb26fe91c52cc4065e9e6524c09d diff --git a/lopsub.c b/lopsub.c index 55ea6ac..d495663 100644 --- a/lopsub.c +++ b/lopsub.c @@ -651,7 +651,7 @@ static int lls_parse_arg(struct lls_arg *la, const struct lls_option *opts, } 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); @@ -724,9 +724,11 @@ int lls_check_arg_count(const struct lls_parse_result *lpr, { if (errctx) *errctx = NULL; + assert(min_argc <= max_argc); if (lpr->num_inputs < min_argc) { - xasprintf(errctx, "at least %u non-option args required, " - "%u given", min_argc, lpr->num_inputs); + xasprintf(errctx, "%s %u non-option args required, %u given", + min_argc < max_argc? "at least" : "exactly", + min_argc, lpr->num_inputs); return -E_LLS_BAD_ARG_COUNT; } if (lpr->num_inputs > max_argc) { @@ -734,8 +736,10 @@ int lls_check_arg_count(const struct lls_parse_result *lpr, xasprintf(errctx, "no non-option args allowed, " "%u given", lpr->num_inputs); else - xasprintf(errctx, "at most %u non-option args allowed, " - "%u given", max_argc, lpr->num_inputs); + xasprintf(errctx, "%s %u non-option args allowed, " + "%u given", min_argc < max_argc? + "at most" : "exactly", + max_argc, lpr->num_inputs); return -E_LLS_BAD_ARG_COUNT; } return 1;