summaryrefslogtreecommitdiff
path: root/src/ostree/ot-main.c
diff options
context:
space:
mode:
authorJonathan Lebon <jonathan@jlebon.com>2019-08-13 15:05:09 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2019-08-14 12:31:10 +0000
commit0c48769de3965b9d62688f671e95267b3f40c998 (patch)
tree1d13bea4094355721f36e03b80fe36984b863fe9 /src/ostree/ot-main.c
parentab73d9f5258a202d0c2a514688091be4db6622e0 (diff)
downloadostree-0c48769de3965b9d62688f671e95267b3f40c998.tar.gz
bin: Better handle --
We would stop passing through `--` and args after it to the underlying command in `ostree_run`. This made it impossible to use `--` to tell the parser that following args starting with `-` really are positional. AFAICT, that logic for `--` here came from a time when we parse options manually in a big loop, in which case breaking out made sense (see 97558276e4f855442337be01abc8f90cf0dd1810). There's an extra step here, which is that glib by default leaves the `--` in the list of args, so we need to take care to remove it from the list after parsing. Closes: #1898 Closes: #1899 Approved by: rfairley
Diffstat (limited to 'src/ostree/ot-main.c')
-rw-r--r--src/ostree/ot-main.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/ostree/ot-main.c b/src/ostree/ot-main.c
index c9c4f299..4b72f399 100644
--- a/src/ostree/ot-main.c
+++ b/src/ostree/ot-main.c
@@ -152,11 +152,6 @@ ostree_run (int argc,
}
}
- else if (g_str_equal (argv[in], "--"))
- {
- break;
- }
-
argv[out] = argv[in];
}
@@ -348,6 +343,22 @@ ostree_option_context_parse (GOptionContext *context,
if (!g_option_context_parse (context, argc, argv, error))
return FALSE;
+ /* Filter out the first -- we see; g_option_context_parse() leaves it in */
+ int in, out;
+ gboolean removed_double_dashes = FALSE;
+ for (in = 1, out = 1; in < *argc; in++, out++)
+ {
+ if (g_str_equal ((*argv)[in], "--") && !removed_double_dashes)
+ {
+ removed_double_dashes = TRUE;
+ out--;
+ continue;
+ }
+
+ (*argv)[out] = (*argv)[in];
+ }
+ *argc = out;
+
if (opt_version)
{
/* This should now be YAML, like `docker version`, so it's both nice to read