Skip to content

Commit

Permalink
parse-opt: Export a non NORETURN usage dumper.
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Pierre Habouzit authored and Junio C Hamano committed Jun 30, 2008
1 parent 7e7bbcb commit ee68b87
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
24 changes: 17 additions & 7 deletions parse-options.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,8 +257,8 @@ int parse_options_end(struct parse_opt_ctx_t *ctx)
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)
Expand Down Expand Up @@ -302,7 +302,7 @@ int parse_options(int argc, const char **argv, const struct option *options,
}

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))
Expand All @@ -315,8 +315,8 @@ int parse_options(int argc, const char **argv, const struct option *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)
Expand Down Expand Up @@ -401,15 +401,25 @@ void usage_with_options_internal(const char * const *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"

Expand Down
9 changes: 9 additions & 0 deletions parse-options.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,12 @@ extern NORETURN void usage_with_options(const char * const *usagestr,

/*----- 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;
Expand All @@ -121,6 +127,9 @@ struct parse_opt_ctx_t {
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);

Expand Down

0 comments on commit ee68b87

Please sign in to comment.