opt: add new parse_early_args_incomplete.
[ccan] / ccan / opt / opt.c
index 09b29bcaf669e0768cb48866b8dc696f3ffc1c72..0514dc8702dfc8ef2327d892f7cbd7606dec2b06 100644 (file)
@@ -207,14 +207,15 @@ bool opt_parse(int *argc, char *argv[], void (*errlog)(const char *fmt, ...))
        /* This helps opt_usage. */
        opt_argv0 = argv[0];
 
-       while ((ret = parse_one(argc, argv, 0, &offset, errlog)) == 1);
+       while ((ret = parse_one(argc, argv, 0, &offset, errlog, false)) == 1);
 
        /* parse_one returns 0 on finish, -1 on error */
        return (ret == 0);
 }
 
-bool opt_early_parse(int argc, char *argv[],
-                    void (*errlog)(const char *fmt, ...))
+static bool early_parse(int argc, char *argv[],
+                       void (*errlog)(const char *fmt, ...),
+                       bool ignore_unknown)
 {
        int ret;
        unsigned off = 0;
@@ -226,7 +227,7 @@ bool opt_early_parse(int argc, char *argv[],
        /* This helps opt_usage. */
        opt_argv0 = argv[0];
 
-       while ((ret = parse_one(&argc, tmpargv, OPT_EARLY, &off, errlog)) == 1);
+       while ((ret = parse_one(&argc, tmpargv, OPT_EARLY, &off, errlog, ignore_unknown)) == 1);
 
        opt_alloc.free(tmpargv);
 
@@ -234,6 +235,18 @@ bool opt_early_parse(int argc, char *argv[],
        return (ret == 0);
 }
 
+bool opt_early_parse(int argc, char *argv[],
+                    void (*errlog)(const char *fmt, ...))
+{
+       return early_parse(argc, argv, errlog, false);
+}
+
+bool opt_early_parse_incomplete(int argc, char *argv[],
+                               void (*errlog)(const char *fmt, ...))
+{
+       return early_parse(argc, argv, errlog, true);
+}
+
 void opt_free_table(void)
 {
        opt_alloc.free(opt_table);