зеркало из https://github.com/microsoft/git.git
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:
Родитель
7e7bbcb4b3
Коммит
ee68b87a62
|
@ -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);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче