cleanup: fix possible overflow errors in binary search, part 2
[gitweb.git] / builtin / range-diff.c
index f01a0be8513412789ca49e28b0cc2519b7c04760..784bd193219e46dff7a9773614036344b23f7039 100644 (file)
@@ -16,42 +16,27 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
        int creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
        struct diff_options diffopt = { NULL };
        int simple_color = -1;
-       struct option options[] = {
+       struct option range_diff_options[] = {
                OPT_INTEGER(0, "creation-factor", &creation_factor,
                            N_("Percentage by which creation is weighted")),
                OPT_BOOL(0, "no-dual-color", &simple_color,
                            N_("use simple diff colors")),
                OPT_END()
        };
-       int i, j, res = 0;
+       struct option *options;
+       int res = 0;
        struct strbuf range1 = STRBUF_INIT, range2 = STRBUF_INIT;
 
        git_config(git_diff_ui_config, NULL);
 
        repo_diff_setup(the_repository, &diffopt);
 
+       options = parse_options_concat(range_diff_options, diffopt.parseopts);
        argc = parse_options(argc, argv, NULL, options,
-                            builtin_range_diff_usage, PARSE_OPT_KEEP_UNKNOWN |
-                            PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
-
-       for (i = j = 1; i < argc && strcmp("--", argv[i]); ) {
-               int c = diff_opt_parse(&diffopt, argv + i, argc - i, prefix);
+                            builtin_range_diff_usage, 0);
 
-               if (!c)
-                       argv[j++] = argv[i++];
-               else
-                       i += c;
-       }
-       while (i < argc)
-               argv[j++] = argv[i++];
-       argc = j;
        diff_setup_done(&diffopt);
 
-       /* Make sure that there are no unparsed options */
-       argc = parse_options(argc, argv, NULL,
-                            options + ARRAY_SIZE(options) - 1, /* OPT_END */
-                            builtin_range_diff_usage, 0);
-
        /* force color when --dual-color was used */
        if (!simple_color)
                diffopt.use_color = 1;
@@ -90,6 +75,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
                error(_("need two commit ranges"));
                usage_with_options(builtin_range_diff_usage, options);
        }
+       FREE_AND_NULL(options);
 
        res = show_range_diff(range1.buf, range2.buf, creation_factor,
                              simple_color < 1, &diffopt);