summaryrefslogtreecommitdiff
path: root/parse-options.c
diff options
context:
space:
mode:
Diffstat (limited to 'parse-options.c')
-rw-r--r--parse-options.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/parse-options.c b/parse-options.c
index f8a155ee13..60224cf8d0 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -480,6 +480,9 @@ static void parse_options_check(const struct option *opts)
opts->long_name))
optbug(opts, "uses feature "
"not supported for dashless options");
+ if (opts->type == OPTION_SET_INT && !opts->defval &&
+ opts->long_name && !(opts->flags & PARSE_OPT_NONEG))
+ optbug(opts, "OPTION_SET_INT 0 should not be negatable");
switch (opts->type) {
case OPTION_COUNTUP:
case OPTION_BIT:
@@ -1109,6 +1112,7 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
for (; opts->type != OPTION_END; opts++) {
size_t pos;
int pad;
+ const char *cp, *np;
if (opts->type == OPTION_SUBCOMMAND)
continue;
@@ -1145,7 +1149,9 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
!(opts->flags & PARSE_OPT_NOARG))
pos += usage_argh(opts, outfile);
- if (pos <= USAGE_OPTS_WIDTH)
+ if (pos == USAGE_OPTS_WIDTH + 1)
+ pad = -1;
+ else if (pos <= USAGE_OPTS_WIDTH)
pad = USAGE_OPTS_WIDTH - pos;
else {
fputc('\n', outfile);
@@ -1157,7 +1163,16 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
(const char *)opts->value);
continue;
}
- fprintf(outfile, "%*s%s\n", pad + USAGE_GAP, "", _(opts->help));
+
+ for (cp = _(opts->help); *cp; cp = np) {
+ np = strchrnul(cp, '\n');
+ fprintf(outfile,
+ "%*s%.*s\n", pad + USAGE_GAP, "",
+ (int)(np - cp), cp);
+ if (*np)
+ np++;
+ pad = USAGE_OPTS_WIDTH;
+ }
}
fputc('\n', outfile);