examples: keep track of whether we processed a "--" arg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
diff --git a/examples/args.c b/examples/args.c
index b228ae3..208c382 100644
--- a/examples/args.c
+++ b/examples/args.c
@@ -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;
+}
diff --git a/examples/args.h b/examples/args.h
index b08a534..2c68bdb 100644
--- a/examples/args.h
+++ b/examples/args.h
@@ -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]
@@ -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
diff --git a/examples/checkout.c b/examples/checkout.c
index b706e04..70b5185 100644
--- a/examples/checkout.c
+++ b/examples/checkout.c
@@ -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;
@@ -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
*/
diff --git a/examples/lg2.c b/examples/lg2.c
index f1a8843..a3987c3 100644
--- a/examples/lg2.c
+++ b/examples/lg2.c
@@ -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;
}
}
diff --git a/examples/log.c b/examples/log.c
index a6bd957..3eee7d4 100644
--- a/examples/log.c
+++ b/examples/log.c
@@ -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"))