Commit c924f36a8bc4aa8e27cc3adabcb090f925d24be0

Etienne Samson 2019-11-06T11:08:35

examples: keep track of whether we processed a "--" arg

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"))