parse-opt: Export a non NORETURN usage dumper.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Pierre Habouzit 2008-06-23 22:28:04 +02:00 коммит произвёл Junio C Hamano
Родитель 7e7bbcb4b3
Коммит ee68b87a62
2 изменённых файлов: 26 добавлений и 7 удалений

Просмотреть файл

@ -257,8 +257,8 @@ int parse_options_end(struct parse_opt_ctx_t *ctx)
return ctx->cpidx + ctx->argc; return ctx->cpidx + ctx->argc;
} }
static NORETURN void usage_with_options_internal(const char * const *, static int usage_with_options_internal(const char * const *,
const struct option *, int); const struct option *, int, int);
int parse_options(int argc, const char **argv, const struct option *options, int parse_options(int argc, const char **argv, const struct option *options,
const char * const usagestr[], int flags) const char * const usagestr[], int flags)
@ -302,7 +302,7 @@ int parse_options(int argc, const char **argv, const struct option *options,
} }
if (!strcmp(arg + 2, "help-all")) 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")) if (!strcmp(arg + 2, "help"))
usage_with_options(usagestr, options); usage_with_options(usagestr, options);
if (parse_long_opt(&ctx, arg + 2, options)) if (parse_long_opt(&ctx, arg + 2, options))
@ -315,8 +315,8 @@ int parse_options(int argc, const char **argv, const struct option *options,
#define USAGE_OPTS_WIDTH 24 #define USAGE_OPTS_WIDTH 24
#define USAGE_GAP 2 #define USAGE_GAP 2
void usage_with_options_internal(const char * const *usagestr, int usage_with_options_internal(const char * const *usagestr,
const struct option *opts, int full) const struct option *opts, int full, int do_exit)
{ {
fprintf(stderr, "usage: %s\n", *usagestr++); fprintf(stderr, "usage: %s\n", *usagestr++);
while (*usagestr && **usagestr) while (*usagestr && **usagestr)
@ -401,15 +401,25 @@ void usage_with_options_internal(const char * const *usagestr,
} }
fputc('\n', stderr); fputc('\n', stderr);
exit(129); if (do_exit)
exit(129);
return PARSE_OPT_HELP;
} }
void usage_with_options(const char * const *usagestr, void usage_with_options(const char * const *usagestr,
const struct option *opts) 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 -----*/ /*----- some often used options -----*/
#include "cache.h" #include "cache.h"

Просмотреть файл

@ -113,6 +113,12 @@ extern NORETURN void usage_with_options(const char * const *usagestr,
/*----- incremantal advanced APIs -----*/ /*----- incremantal advanced APIs -----*/
enum {
PARSE_OPT_HELP = -1,
PARSE_OPT_DONE,
PARSE_OPT_UNKNOWN,
};
struct parse_opt_ctx_t { struct parse_opt_ctx_t {
const char **argv; const char **argv;
const char **out; const char **out;
@ -121,6 +127,9 @@ struct parse_opt_ctx_t {
int flags; 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, extern void parse_options_start(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, int flags); int argc, const char **argv, int flags);