summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7e7bbcb)
raw | patch | inline | side by side (parent: 7e7bbcb)
author | Pierre Habouzit <madcoder@debian.org> | |
Mon, 23 Jun 2008 20:28:04 +0000 (22:28 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Mon, 30 Jun 2008 21:51:12 +0000 (14:51 -0700) |
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
parse-options.c | patch | blob | history | |
parse-options.h | patch | blob | history |
diff --git a/parse-options.c b/parse-options.c
index 9964877edfc1d7b4e5344e04c152f1274699fe64..007b78eb248b5eab61f7f39942ad6d798a0c8cfa 100644 (file)
--- a/parse-options.c
+++ b/parse-options.c
return ctx->cpidx + ctx->argc;
}
-static NORETURN void usage_with_options_internal(const char * const *,
- const struct option *, int);
+static int usage_with_options_internal(const char * const *,
+ const struct option *, int, int);
int parse_options(int argc, const char **argv, const struct option *options,
const char * const usagestr[], int flags)
}
if (!strcmp(arg + 2, "help-all"))
- usage_with_options_internal(usagestr, options, 1);
+ usage_with_options_internal(usagestr, options, 1, 1);
if (!strcmp(arg + 2, "help"))
usage_with_options(usagestr, options);
if (parse_long_opt(&ctx, arg + 2, options))
#define USAGE_OPTS_WIDTH 24
#define USAGE_GAP 2
-void usage_with_options_internal(const char * const *usagestr,
- const struct option *opts, int full)
+int usage_with_options_internal(const char * const *usagestr,
+ const struct option *opts, int full, int do_exit)
{
fprintf(stderr, "usage: %s\n", *usagestr++);
while (*usagestr && **usagestr)
}
fputc('\n', stderr);
- exit(129);
+ if (do_exit)
+ exit(129);
+ return PARSE_OPT_HELP;
}
void usage_with_options(const char * const *usagestr,
const struct option *opts)
{
- usage_with_options_internal(usagestr, opts, 0);
+ usage_with_options_internal(usagestr, opts, 0, 1);
+ exit(129); /* make gcc happy */
}
+int parse_options_usage(const char * const *usagestr,
+ const struct option *opts)
+{
+ return usage_with_options_internal(usagestr, opts, 0, 0);
+}
+
+
/*----- some often used options -----*/
#include "cache.h"
diff --git a/parse-options.h b/parse-options.h
index 72027f3c66ef7df0fe18002887a03e24af571ca0..f66ca352dc050bd65fdc15a7dd763b69cdec92df 100644 (file)
--- a/parse-options.h
+++ b/parse-options.h
/*----- incremantal advanced APIs -----*/
+enum {
+ PARSE_OPT_HELP = -1,
+ PARSE_OPT_DONE,
+ PARSE_OPT_UNKNOWN,
+};
+
struct parse_opt_ctx_t {
const char **argv;
const char **out;
int flags;
};
+extern int parse_options_usage(const char * const *usagestr,
+ const struct option *opts);
+
extern void parse_options_start(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, int flags);