Skip to content

Commit

Permalink
examples: keep track of whether we processed a "--" arg
Browse files Browse the repository at this point in the history
  • Loading branch information
tiennou committed Nov 6, 2019
1 parent 025a935 commit c924f36
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 10 deletions.
13 changes: 13 additions & 0 deletions examples/args.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,16 @@ int match_int_arg(
return 0;
return match_int_internal(out, found, allow_negative, opt);
}

int match_arg_separator(struct args_info *args)
{
if (args->opts_done)
return 1;

if (strcmp(args->argv[args->pos], "--") != 0)
return 0;

args->opts_done = 1;
args->pos++;
return 1;
}
6 changes: 6 additions & 0 deletions examples/args.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ struct args_info {
int argc;
char **argv;
int pos;
int opts_done : 1; /**< Did we see a -- separator */
};
#define ARGS_INFO_INIT { argc, argv, 0, 0 }
#define ARGS_CURRENT(args) args->argv[args->pos]
Expand Down Expand Up @@ -76,4 +77,9 @@ extern int match_int_arg(
*/
extern int match_bool_arg(int *out, struct args_info *args, const char *opt);

/**
* Check if we're processing past the single -- separator
*/
extern int match_arg_separator(struct args_info *args);

#endif
8 changes: 2 additions & 6 deletions examples/checkout.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ static void parse_options(const char **repo_path, checkout_options *opts, struct
const char *curr = args->argv[args->pos];
int bool_arg;

if (strcmp(curr, "--") == 0) {
if (match_arg_separator(args)) {
break;
} else if (!strcmp(curr, "--force")) {
opts->force = 1;
Expand Down Expand Up @@ -190,11 +190,7 @@ int lg2_checkout(git_repository *repo, int argc, char **argv)
goto cleanup;
}

if (args.pos >= args.argc) {
fprintf(stderr, "unhandled\n");
err = -1;
goto cleanup;
} else if (!strcmp("--", args.argv[args.pos])) {
if (match_arg_separator(&args)) {
/**
* Try to checkout the given path
*/
Expand Down
3 changes: 1 addition & 2 deletions examples/lg2.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ int main(int argc, char **argv)
break;
} else if (optional_str_arg(&git_dir, &args, "--git-dir", ".git")) {
continue;
} else if (!strcmp(a, "--")) {
/* arg separator */
} else if (match_arg_separator(&args)) {
break;
}
}
Expand Down
3 changes: 1 addition & 2 deletions examples/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -424,8 +424,7 @@ static int parse_options(
else
/** Try failed revision parse as filename. */
break;
} else if (!strcmp(a, "--")) {
++args.pos;
} else if (!match_arg_separator(&args)) {
break;
}
else if (!strcmp(a, "--date-order"))
Expand Down

0 comments on commit c924f36

Please sign in to comment.