Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
parse-opt: do not print errors on unknown options, return -2 intead.
author
Pierre Habouzit
<madcoder@debian.org>
Mon, 23 Jun 2008 20:46:36 +0000
(22:46 +0200)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 30 Jun 2008 21:51:13 +0000
(14:51 -0700)
This way we can catch "unknown" options more easily.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
parse-options.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
ff43ec3
)
diff --git
a/parse-options.c
b/parse-options.c
index 04adf219cace134e2e51440b037b0e8a2622b3f7..19fc849f4b2728f9d40db9e0a8f50cecc165b86c 100644
(file)
--- a/
parse-options.c
+++ b/
parse-options.c
@@
-94,14
+94,14
@@
static int get_value(struct parse_opt_ctx_t *p,
case OPTION_CALLBACK:
if (unset)
case OPTION_CALLBACK:
if (unset)
- return (*opt->callback)(opt, NULL, 1);
+ return (*opt->callback)(opt, NULL, 1)
? (-1) : 0
;
if (opt->flags & PARSE_OPT_NOARG)
if (opt->flags & PARSE_OPT_NOARG)
- return (*opt->callback)(opt, NULL, 0);
+ return (*opt->callback)(opt, NULL, 0)
? (-1) : 0
;
if (opt->flags & PARSE_OPT_OPTARG && !p->opt)
if (opt->flags & PARSE_OPT_OPTARG && !p->opt)
- return (*opt->callback)(opt, NULL, 0);
+ return (*opt->callback)(opt, NULL, 0)
? (-1) : 0
;
if (!arg)
return opterror(opt, "requires a value", flags);
if (!arg)
return opterror(opt, "requires a value", flags);
- return (*opt->callback)(opt, get_arg(p), 0);
+ return (*opt->callback)(opt, get_arg(p), 0)
? (-1) : 0
;
case OPTION_INTEGER:
if (unset) {
case OPTION_INTEGER:
if (unset) {
@@
-132,7
+132,7
@@
static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *optio
return get_value(p, options, OPT_SHORT);
}
}
return get_value(p, options, OPT_SHORT);
}
}
- return
error("unknown switch `%c'", *p->opt)
;
+ return
-2
;
}
static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
}
static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
@@
-217,7
+217,7
@@
static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
abbrev_option->long_name);
if (abbrev_option)
return get_value(p, abbrev_option, abbrev_flags);
abbrev_option->long_name);
if (abbrev_option)
return get_value(p, abbrev_option, abbrev_flags);
- return
error("unknown option `%s'", arg)
;
+ return
-2
;
}
void check_typos(const char *arg, const struct option *options)
}
void check_typos(const char *arg, const struct option *options)
@@
-271,15
+271,23
@@
int parse_options_step(struct parse_opt_ctx_t *ctx,
ctx->opt = arg + 1;
if (*ctx->opt == 'h')
return parse_options_usage(usagestr, options);
ctx->opt = arg + 1;
if (*ctx->opt == 'h')
return parse_options_usage(usagestr, options);
- if (parse_short_opt(ctx, options) < 0)
- usage_with_options(usagestr, options);
+ switch (parse_short_opt(ctx, options)) {
+ case -1:
+ return parse_options_usage(usagestr, options);
+ case -2:
+ return PARSE_OPT_UNKNOWN;
+ }
if (ctx->opt)
check_typos(arg + 1, options);
while (ctx->opt) {
if (*ctx->opt == 'h')
return parse_options_usage(usagestr, options);
if (ctx->opt)
check_typos(arg + 1, options);
while (ctx->opt) {
if (*ctx->opt == 'h')
return parse_options_usage(usagestr, options);
- if (parse_short_opt(ctx, options) < 0)
- usage_with_options(usagestr, options);
+ switch (parse_short_opt(ctx, options)) {
+ case -1:
+ return parse_options_usage(usagestr, options);
+ case -2:
+ return PARSE_OPT_UNKNOWN;
+ }
}
continue;
}
}
continue;
}
@@
-296,8
+304,12
@@
int parse_options_step(struct parse_opt_ctx_t *ctx,
return usage_with_options_internal(usagestr, options, 1);
if (!strcmp(arg + 2, "help"))
return parse_options_usage(usagestr, options);
return usage_with_options_internal(usagestr, options, 1);
if (!strcmp(arg + 2, "help"))
return parse_options_usage(usagestr, options);
- if (parse_long_opt(ctx, arg + 2, options))
- usage_with_options(usagestr, options);
+ switch (parse_long_opt(ctx, arg + 2, options)) {
+ case -1:
+ return parse_options_usage(usagestr, options);
+ case -2:
+ return PARSE_OPT_UNKNOWN;
+ }
}
return PARSE_OPT_DONE;
}
}
return PARSE_OPT_DONE;
}
@@
-321,7
+333,12
@@
int parse_options(int argc, const char **argv, const struct option *options,
case PARSE_OPT_DONE:
break;
default: /* PARSE_OPT_UNKNOWN */
case PARSE_OPT_DONE:
break;
default: /* PARSE_OPT_UNKNOWN */
- abort(); /* unreached yet */
+ if (ctx.argv[0][1] == '-') {
+ error("unknown option `%s'", ctx.argv[0] + 2);
+ } else {
+ error("unknown switch `%c'", *ctx.opt);
+ }
+ usage_with_options(usagestr, options);
}
return parse_options_end(&ctx);
}
return parse_options_end(&ctx);