summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jonathan Nieder <jrnieder@gmail.com>2010-12-01 17:32:55 -0600
committerLibravatar Junio C Hamano <gitster@pobox.com>2010-12-07 14:19:32 -0800
commit979240fee32628c317998f3c3fe2619cf01decc2 (patch)
tree7bc371cf6b37aa152da3fa48f34cb1de435a711d
parentparse-options: allow git commands to invent new option types (diff)
downloadtgif-979240fee32628c317998f3c3fe2619cf01decc2.tar.xz
parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTION
Introduce a PARSE_OPT_NON_OPTION state, so parse_option_step() callers can easily distinguish between non-options and other reasons for option parsing termination (like "--"). Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--parse-options.c3
-rw-r--r--parse-options.h1
2 files changed, 3 insertions, 1 deletions
diff --git a/parse-options.c b/parse-options.c
index cd92686916..42b51ef145 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -373,7 +373,7 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
if (parse_nodash_opt(ctx, arg, options) == 0)
continue;
if (ctx->flags & PARSE_OPT_STOP_AT_NON_OPTION)
- break;
+ return PARSE_OPT_NON_OPTION;
ctx->out[ctx->cpidx++] = ctx->argv[0];
continue;
}
@@ -455,6 +455,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
switch (parse_options_step(&ctx, options, usagestr)) {
case PARSE_OPT_HELP:
exit(129);
+ case PARSE_OPT_NON_OPTION:
case PARSE_OPT_DONE:
break;
default: /* PARSE_OPT_UNKNOWN */
diff --git a/parse-options.h b/parse-options.h
index 470bb33298..3c2ec1d092 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -167,6 +167,7 @@ extern NORETURN void usage_msg_opt(const char *msg,
enum {
PARSE_OPT_HELP = -1,
PARSE_OPT_DONE,
+ PARSE_OPT_NON_OPTION,
PARSE_OPT_UNKNOWN
};