diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2009-05-07 21:45:42 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-05-09 00:29:50 -0700 |
commit | 51a9949eda7421a2dd9cb45b2110d6571ba09bbd (patch) | |
tree | 319237eb500050e73ddd9b6e5dee585a41dc4b69 /parse-options.c | |
parent | e0319ff5ed2b7927302389181449dcd029a26622 (diff) | |
download | git-51a9949eda7421a2dd9cb45b2110d6571ba09bbd.tar.gz |
parseopt: add PARSE_OPT_NODASH
Add support for options that don't start with a dash. Initially, they
don't accept arguments and can only be short options, i.e. consist of a
single character.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'parse-options.c')
-rw-r--r-- | parse-options.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/parse-options.c b/parse-options.c index aaa218d191..c52b8ccf59 100644 --- a/parse-options.c +++ b/parse-options.c @@ -245,6 +245,25 @@ is_abbreviated: return -2; } +static int parse_nodash_opt(struct parse_opt_ctx_t *p, const char *arg, + const struct option *options) +{ + for (; options->type != OPTION_END; options++) { + if (!(options->flags & PARSE_OPT_NODASH)) + continue; + if ((options->flags & PARSE_OPT_OPTARG) || + !(options->flags & PARSE_OPT_NOARG)) + die("BUG: dashless options don't support arguments"); + if (!(options->flags & PARSE_OPT_NONEG)) + die("BUG: dashless options don't support negation"); + if (options->long_name) + die("BUG: dashless options can't be long"); + if (options->short_name == arg[0] && arg[1] == '\0') + return get_value(p, options, OPT_SHORT); + } + return -2; +} + static void check_typos(const char *arg, const struct option *options) { if (strlen(arg) < 3) @@ -295,6 +314,8 @@ int parse_options_step(struct parse_opt_ctx_t *ctx, const char *arg = ctx->argv[0]; if (*arg != '-' || !arg[1]) { + if (parse_nodash_opt(ctx, arg, options) == 0) + continue; if (ctx->flags & PARSE_OPT_STOP_AT_NON_OPTION) break; ctx->out[ctx->cpidx++] = ctx->argv[0]; @@ -427,8 +448,12 @@ int usage_with_options_internal(const char * const *usagestr, continue; pos = fprintf(stderr, " "); - if (opts->short_name) - pos += fprintf(stderr, "-%c", opts->short_name); + if (opts->short_name) { + if (opts->flags & PARSE_OPT_NODASH) + pos += fprintf(stderr, "%c", opts->short_name); + else + pos += fprintf(stderr, "-%c", opts->short_name); + } if (opts->long_name && opts->short_name) pos += fprintf(stderr, ", "); if (opts->long_name) |