From 3d7500cc66daf1b824fe6e6e4b7b975c6be63990 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Tue, 21 Dec 2021 22:58:33 -0500 Subject: [PATCH] fixed option parsing and added support for -- --- lib/a/Options.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/a/Options.c b/lib/a/Options.c index dd3c894..72c4cf1 100644 --- a/lib/a/Options.c +++ b/lib/a/Options.c @@ -129,23 +129,38 @@ int Options_Parse(int argc, char** argv) ARGV0 = argv[0]; int new_argc = 0; + int curr_arg = 1; /* now parse the arguments */ - for (int i = 1; i < argc;) + for (; curr_arg < argc;) { - if (argv[i][0] == '-' && argv[i][1] == '-') + if (argv[curr_arg][0] == '-' && argv[curr_arg][1] == '-') { - ParseLongOption(&i, argv); + if (argv[curr_arg][2] == '\0') + { + curr_arg++; + break; + } + else + { + ParseLongOption(&curr_arg, argv); + } } - else if (argv[i][0] == '-') + else if (argv[curr_arg][0] == '-') { - ParseShortOption(&i, argv); + ParseShortOption(&curr_arg, argv); } else { - argv[new_argc++] = argv[i]; - i++; + argv[new_argc++] = argv[curr_arg]; + curr_arg++; } } + /* move remaining positional args */ + for (; curr_arg < argc; curr_arg++) + { + argv[new_argc++] = argv[curr_arg]; + } + argv[new_argc] = NULL; return new_argc; } -- 2.54.0