The code that's not converted to use parse_options() often does if (!starts_with(arg, "foo=")) { value = atoi(arg + 4); } This patch removes those magic numbers with skip_prefix() Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/fetch-pack.c | 13 +++++---- builtin/index-pack.c | 17 +++++------ builtin/ls-remote.c | 9 +++--- builtin/mailinfo.c | 5 ++-- builtin/reflog.c | 9 +++--- builtin/rev-parse.c | 41 +++++++++++++------------- builtin/send-pack.c | 18 ++++++------ builtin/unpack-objects.c | 5 ++-- builtin/update-ref.c | 21 +++++++------- daemon.c | 75 ++++++++++++++++++++++++------------------------ diff.c | 49 +++++++++++++++---------------- git.c | 13 +++++---- merge-recursive.c | 13 +++++---- revision.c | 60 +++++++++++++++++++------------------- upload-pack.c | 5 ++-- 15 files changed, 182 insertions(+), 171 deletions(-) diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 8b8978a2..2df1423 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -47,13 +47,14 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) for (i = 1; i < argc && *argv[i] == '-'; i++) { const char *arg = argv[i]; + const char *optarg; - if (starts_with(arg, "--upload-pack=")) { - args.uploadpack = arg + 14; + if ((optarg = skip_prefix(arg, "--upload-pack=")) != NULL) { + args.uploadpack = optarg; continue; } - if (starts_with(arg, "--exec=")) { - args.uploadpack = arg + 7; + if ((optarg = skip_prefix(arg, "--exec=")) != NULL) { + args.uploadpack = optarg; continue; } if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) { @@ -89,8 +90,8 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) args.verbose = 1; continue; } - if (starts_with(arg, "--depth=")) { - args.depth = strtol(arg + 8, NULL, 0); + if ((optarg = skip_prefix(arg, "--depth=")) != NULL) { + args.depth = strtol(optarg, NULL, 0); continue; } if (!strcmp("--no-progress", arg)) { diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 2f37a38..67eff7a 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -1511,6 +1511,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix) for (i = 1; i < argc; i++) { const char *arg = argv[i]; + const char *optarg; if (*arg == '-') { if (!strcmp(arg, "--stdin")) { @@ -1534,11 +1535,11 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix) stat_only = 1; } else if (!strcmp(arg, "--keep")) { keep_msg = ""; - } else if (starts_with(arg, "--keep=")) { - keep_msg = arg + 7; - } else if (starts_with(arg, "--threads=")) { + } else if ((optarg = skip_prefix(arg, "--keep=")) != NULL) { + keep_msg = optarg; + } else if ((optarg = skip_prefix(arg, "--threads=")) != NULL) { char *end; - nr_threads = strtoul(arg+10, &end, 0); + nr_threads = strtoul(optarg, &end, 0); if (!arg[10] || *end || nr_threads < 0) usage(index_pack_usage); #ifdef NO_PTHREADS @@ -1547,13 +1548,13 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix) "ignoring %s"), arg); nr_threads = 1; #endif - } else if (starts_with(arg, "--pack_header=")) { + } else if ((optarg = skip_prefix(arg, "--pack_header=")) != NULL) { struct pack_header *hdr; char *c; hdr = (struct pack_header *)input_buffer; hdr->hdr_signature = htonl(PACK_SIGNATURE); - hdr->hdr_version = htonl(strtoul(arg + 14, &c, 10)); + hdr->hdr_version = htonl(strtoul(optarg, &c, 10)); if (*c != ',') die(_("bad %s"), arg); hdr->hdr_entries = htonl(strtoul(c + 1, &c, 10)); @@ -1566,9 +1567,9 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix) if (index_name || (i+1) >= argc) usage(index_pack_usage); index_name = argv[++i]; - } else if (starts_with(arg, "--index-version=")) { + } else if ((optarg = skip_prefix(arg, "--index-version=")) != NULL) { char *c; - opts.version = strtoul(arg + 16, &c, 10); + opts.version = strtoul(optarg, &c, 10); if (opts.version > 2) die(_("bad %s"), arg); if (*c == ',') diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c index 39e5144..15c9fb3 100644 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@ -48,14 +48,15 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix) for (i = 1; i < argc; i++) { const char *arg = argv[i]; + const char *optarg; if (*arg == '-') { - if (starts_with(arg, "--upload-pack=")) { - uploadpack = arg + 14; + if ((optarg = skip_prefix(arg, "--upload-pack=")) != NULL) { + uploadpack = optarg; continue; } - if (starts_with(arg, "--exec=")) { - uploadpack = arg + 7; + if ((optarg = skip_prefix(arg, "--exec=")) != NULL) { + uploadpack = optarg; continue; } if (!strcmp("--tags", arg) || !strcmp("-t", arg)) { diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c index 2c3cd8e..2100e23 100644 --- a/builtin/mailinfo.c +++ b/builtin/mailinfo.c @@ -1002,6 +1002,7 @@ static const char mailinfo_usage[] = int cmd_mailinfo(int argc, const char **argv, const char *prefix) { const char *def_charset; + const char *optarg; /* NEEDSWORK: might want to do the optional .git/ directory * discovery @@ -1020,8 +1021,8 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) metainfo_charset = def_charset; else if (!strcmp(argv[1], "-n")) metainfo_charset = NULL; - else if (starts_with(argv[1], "--encoding=")) - metainfo_charset = argv[1] + 11; + else if ((optarg = skip_prefix(argv[1], "--encoding=")) != NULL) + metainfo_charset = optarg; else if (!strcmp(argv[1], "--scissors")) use_scissors = 1; else if (!strcmp(argv[1], "--no-scissors")) diff --git a/builtin/reflog.c b/builtin/reflog.c index 852cff6..84a8bd9 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -608,15 +608,16 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) for (i = 1; i < argc; i++) { const char *arg = argv[i]; + const char *optarg; if (!strcmp(arg, "--dry-run") || !strcmp(arg, "-n")) cb.dry_run = 1; - else if (starts_with(arg, "--expire=")) { - if (parse_expiry_date(arg + 9, &cb.expire_total)) + else if ((optarg = skip_prefix(arg, "--expire=")) != NULL) { + if (parse_expiry_date(optarg, &cb.expire_total)) die(_("'%s' is not a valid timestamp"), arg); explicit_expiry |= EXPIRE_TOTAL; } - else if (starts_with(arg, "--expire-unreachable=")) { - if (parse_expiry_date(arg + 21, &cb.expire_unreachable)) + else if ((optarg = skip_prefix(arg, "--expire-unreachable=")) != NULL) { + if (parse_expiry_date(optarg, &cb.expire_unreachable)) die(_("'%s' is not a valid timestamp"), arg); explicit_expiry |= EXPIRE_UNREACH; } diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 6e802fd..1a0bd12 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -505,6 +505,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) git_config(git_default_config, NULL); for (i = 1; i < argc; i++) { const char *arg = argv[i]; + const char *optarg; if (as_is) { if (show_file(arg, output_prefix) && as_is < 2) @@ -618,8 +619,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) for_each_ref(show_reference, NULL); continue; } - if (starts_with(arg, "--disambiguate=")) { - for_each_abbrev(arg + 15, show_abbrev, NULL); + if ((optarg = skip_prefix(arg, "--disambiguate=")) != NULL) { + for_each_abbrev(optarg, show_abbrev, NULL); continue; } if (!strcmp(arg, "--bisect")) { @@ -627,8 +628,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) for_each_ref_in("refs/bisect/good", anti_reference, NULL); continue; } - if (starts_with(arg, "--branches=")) { - for_each_glob_ref_in(show_reference, arg + 11, + if ((optarg = skip_prefix(arg, "--branches=")) != NULL) { + for_each_glob_ref_in(show_reference, optarg, "refs/heads/", NULL); clear_ref_exclusion(&ref_excludes); continue; @@ -638,8 +639,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) clear_ref_exclusion(&ref_excludes); continue; } - if (starts_with(arg, "--tags=")) { - for_each_glob_ref_in(show_reference, arg + 7, + if ((optarg = skip_prefix(arg, "--tags=")) != NULL) { + for_each_glob_ref_in(show_reference, optarg, "refs/tags/", NULL); clear_ref_exclusion(&ref_excludes); continue; @@ -649,13 +650,13 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) clear_ref_exclusion(&ref_excludes); continue; } - if (starts_with(arg, "--glob=")) { - for_each_glob_ref(show_reference, arg + 7, NULL); + if ((optarg = skip_prefix(arg, "--glob=")) != NULL) { + for_each_glob_ref(show_reference, optarg, NULL); clear_ref_exclusion(&ref_excludes); continue; } - if (starts_with(arg, "--remotes=")) { - for_each_glob_ref_in(show_reference, arg + 10, + if ((optarg = skip_prefix(arg, "--remotes=")) != NULL) { + for_each_glob_ref_in(show_reference, optarg, "refs/remotes/", NULL); clear_ref_exclusion(&ref_excludes); continue; @@ -665,8 +666,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) clear_ref_exclusion(&ref_excludes); continue; } - if (starts_with(arg, "--exclude=")) { - add_ref_exclusion(&ref_excludes, arg + 10); + if ((optarg = skip_prefix(arg, "--exclude=")) != NULL) { + add_ref_exclusion(&ref_excludes, optarg); continue; } if (!strcmp(arg, "--local-env-vars")) { @@ -747,20 +748,20 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) : "false"); continue; } - if (starts_with(arg, "--since=")) { - show_datestring("--max-age=", arg+8); + if ((optarg = skip_prefix(arg, "--since=")) != NULL) { + show_datestring("--max-age=", optarg); continue; } - if (starts_with(arg, "--after=")) { - show_datestring("--max-age=", arg+8); + if ((optarg = skip_prefix(arg, "--after=")) != NULL) { + show_datestring("--max-age=", optarg); continue; } - if (starts_with(arg, "--before=")) { - show_datestring("--min-age=", arg+9); + if ((optarg = skip_prefix(arg, "--before=")) != NULL) { + show_datestring("--min-age=", optarg); continue; } - if (starts_with(arg, "--until=")) { - show_datestring("--min-age=", arg+8); + if ((optarg = skip_prefix(arg, "--until=")) != NULL) { + show_datestring("--min-age=", optarg); continue; } if (show_flag(arg) && verify) diff --git a/builtin/send-pack.c b/builtin/send-pack.c index e7f0b97..9efc422 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -113,18 +113,19 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) argv++; for (i = 1; i < argc; i++, argv++) { const char *arg = *argv; + const char *optarg; if (*arg == '-') { - if (starts_with(arg, "--receive-pack=")) { - receivepack = arg + 15; + if ((optarg = skip_prefix(arg, "--receive-pack=")) != NULL) { + receivepack = optarg; continue; } - if (starts_with(arg, "--exec=")) { - receivepack = arg + 7; + if ((optarg = skip_prefix(arg, "--exec=")) != NULL) { + receivepack = optarg; continue; } - if (starts_with(arg, "--remote=")) { - remote_name = arg + 9; + if ((optarg = skip_prefix(arg, "--remote=")) != NULL) { + remote_name = optarg; continue; } if (!strcmp(arg, "--all")) { @@ -181,9 +182,8 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) exit(1); continue; } - if (starts_with(arg, "--" CAS_OPT_NAME "=")) { - if (parse_push_cas_option(&cas, - strchr(arg, '=') + 1, 0) < 0) + if ((optarg = skip_prefix(arg, "--" CAS_OPT_NAME "=")) != NULL) { + if (parse_push_cas_option(&cas, optarg, 0) < 0) exit(1); continue; } diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 62ff673..a7cd823 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c @@ -505,6 +505,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix) for (i = 1 ; i < argc; i++) { const char *arg = argv[i]; + const char *optarg; if (*arg == '-') { if (!strcmp(arg, "-n")) { @@ -523,13 +524,13 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix) strict = 1; continue; } - if (starts_with(arg, "--pack_header=")) { + if ((optarg = skip_prefix(arg, "--pack_header=")) != NULL) { struct pack_header *hdr; char *c; hdr = (struct pack_header *)buffer; hdr->hdr_signature = htonl(PACK_SIGNATURE); - hdr->hdr_version = htonl(strtoul(arg + 14, &c, 10)); + hdr->hdr_version = htonl(strtoul(optarg, &c, 10)); if (*c != ',') die("bad %s", arg); hdr->hdr_entries = htonl(strtoul(c + 1, &c, 10)); diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 1292cfe..09c921a 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -222,6 +222,7 @@ static void parse_cmd_option(const char *next) static void update_refs_stdin(void) { struct strbuf cmd = STRBUF_INIT; + const char *optarg; /* Read each line dispatch its command */ while (strbuf_getline(&cmd, stdin, line_termination) != EOF) @@ -229,16 +230,16 @@ static void update_refs_stdin(void) die("empty command in input"); else if (isspace(*cmd.buf)) die("whitespace before command: %s", cmd.buf); - else if (starts_with(cmd.buf, "update ")) - parse_cmd_update(cmd.buf + 7); - else if (starts_with(cmd.buf, "create ")) - parse_cmd_create(cmd.buf + 7); - else if (starts_with(cmd.buf, "delete ")) - parse_cmd_delete(cmd.buf + 7); - else if (starts_with(cmd.buf, "verify ")) - parse_cmd_verify(cmd.buf + 7); - else if (starts_with(cmd.buf, "option ")) - parse_cmd_option(cmd.buf + 7); + else if ((optarg = skip_prefix(cmd.buf, "update ")) != NULL) + parse_cmd_update(optarg); + else if ((optarg = skip_prefix(cmd.buf, "create ")) != NULL) + parse_cmd_create(optarg); + else if ((optarg = skip_prefix(cmd.buf, "delete ")) != NULL) + parse_cmd_delete(optarg); + else if ((optarg = skip_prefix(cmd.buf, "verify ")) != NULL) + parse_cmd_verify(optarg); + else if ((optarg = skip_prefix(cmd.buf, "option ")) != NULL) + parse_cmd_option(optarg); else die("unknown command: %s", cmd.buf); diff --git a/daemon.c b/daemon.c index 7bee953..9d3cc18 100644 --- a/daemon.c +++ b/daemon.c @@ -39,8 +39,8 @@ static int strict_paths; static int export_all_trees; /* Take all paths relative to this one if non-NULL */ -static char *base_path; -static char *interpolated_path; +static const char *base_path; +static const char *interpolated_path; static int base_path_relaxed; /* Flag indicating client sent extra args. */ @@ -253,7 +253,7 @@ static int daemon_error(const char *dir, const char *msg) return -1; } -static char *access_hook; +static const char *access_hook; static int run_access_hook(struct daemon_service *service, const char *dir, const char *path) { @@ -1164,15 +1164,16 @@ int main(int argc, char **argv) for (i = 1; i < argc; i++) { char *arg = argv[i]; + const char *optarg; - if (starts_with(arg, "--listen=")) { - string_list_append(&listen_addr, xstrdup_tolower(arg + 9)); + if ((optarg = skip_prefix(arg, "--listen=")) != NULL) { + string_list_append(&listen_addr, xstrdup_tolower(optarg)); continue; } - if (starts_with(arg, "--port=")) { + if ((optarg = skip_prefix(arg, "--port=")) != NULL) { char *end; unsigned long n; - n = strtoul(arg+7, &end, 0); + n = strtoul(optarg, &end, 0); if (arg[7] && !*end) { listen_port = n; continue; @@ -1199,20 +1200,20 @@ int main(int argc, char **argv) export_all_trees = 1; continue; } - if (starts_with(arg, "--access-hook=")) { - access_hook = arg + 14; + if ((optarg = skip_prefix(arg, "--access-hook=")) != NULL) { + access_hook = optarg; continue; } - if (starts_with(arg, "--timeout=")) { - timeout = atoi(arg+10); + if ((optarg = skip_prefix(arg, "--timeout=")) != NULL) { + timeout = atoi(optarg); continue; } - if (starts_with(arg, "--init-timeout=")) { - init_timeout = atoi(arg+15); + if ((optarg = skip_prefix(arg, "--init-timeout=")) != NULL) { + init_timeout = atoi(optarg); continue; } - if (starts_with(arg, "--max-connections=")) { - max_connections = atoi(arg+18); + if ((optarg = skip_prefix(arg, "--max-connections=")) != NULL) { + max_connections = atoi(optarg); if (max_connections < 0) max_connections = 0; /* unlimited */ continue; @@ -1221,16 +1222,16 @@ int main(int argc, char **argv) strict_paths = 1; continue; } - if (starts_with(arg, "--base-path=")) { - base_path = arg+12; + if ((optarg = skip_prefix(arg, "--base-path=")) != NULL) { + base_path = optarg; continue; } if (!strcmp(arg, "--base-path-relaxed")) { base_path_relaxed = 1; continue; } - if (starts_with(arg, "--interpolated-path=")) { - interpolated_path = arg+20; + if ((optarg = skip_prefix(arg, "--interpolated-path=")) != NULL) { + interpolated_path = optarg; continue; } if (!strcmp(arg, "--reuseaddr")) { @@ -1241,12 +1242,12 @@ int main(int argc, char **argv) user_path = ""; continue; } - if (starts_with(arg, "--user-path=")) { - user_path = arg + 12; + if ((optarg = skip_prefix(arg, "--user-path=")) != NULL) { + user_path = optarg; continue; } - if (starts_with(arg, "--pid-file=")) { - pid_file = arg + 11; + if ((optarg = skip_prefix(arg, "--pid-file=")) != NULL) { + pid_file = optarg; continue; } if (!strcmp(arg, "--detach")) { @@ -1254,35 +1255,35 @@ int main(int argc, char **argv) log_syslog = 1; continue; } - if (starts_with(arg, "--user=")) { - user_name = arg + 7; + if ((optarg = skip_prefix(arg, "--user=")) != NULL) { + user_name = optarg; continue; } - if (starts_with(arg, "--group=")) { - group_name = arg + 8; + if ((optarg = skip_prefix(arg, "--group=")) != NULL) { + group_name = optarg; continue; } - if (starts_with(arg, "--enable=")) { - enable_service(arg + 9, 1); + if ((optarg = skip_prefix(arg, "--enable=")) != NULL) { + enable_service(optarg, 1); continue; } - if (starts_with(arg, "--disable=")) { - enable_service(arg + 10, 0); + if ((optarg = skip_prefix(arg, "--disable=")) != NULL) { + enable_service(optarg, 0); continue; } - if (starts_with(arg, "--allow-override=")) { - make_service_overridable(arg + 17, 1); + if ((optarg = skip_prefix(arg, "--allow-override=")) != NULL) { + make_service_overridable(optarg, 1); continue; } - if (starts_with(arg, "--forbid-override=")) { - make_service_overridable(arg + 18, 0); + if ((optarg = skip_prefix(arg, "--forbid-override=")) != NULL) { + make_service_overridable(optarg, 0); continue; } - if (starts_with(arg, "--informative-errors")) { + if ((optarg = skip_prefix(arg, "--informative-errors")) != NULL) { informative_errors = 1; continue; } - if (starts_with(arg, "--no-informative-errors")) { + if ((optarg = skip_prefix(arg, "--no-informative-errors")) != NULL) { informative_errors = 0; continue; } diff --git a/diff.c b/diff.c index b79432b..90a1929 100644 --- a/diff.c +++ b/diff.c @@ -2353,6 +2353,7 @@ static void builtin_diff(const char *name_a, xdemitconf_t xecfg; struct emit_callback ecbdata; const struct userdiff_funcname *pe; + const char *optarg; if (must_show_header) { fprintf(o->file, "%s", header.buf); @@ -2387,10 +2388,10 @@ static void builtin_diff(const char *name_a, xdiff_set_find_func(&xecfg, pe->pattern, pe->cflags); if (!diffopts) ; - else if (starts_with(diffopts, "--unified=")) - xecfg.ctxlen = strtoul(diffopts + 10, NULL, 10); - else if (starts_with(diffopts, "-u")) - xecfg.ctxlen = strtoul(diffopts + 2, NULL, 10); + else if ((optarg = skip_prefix(diffopts, "--unified=")) != NULL) + xecfg.ctxlen = strtoul(optarg, NULL, 10); + else if ((optarg = skip_prefix(diffopts, "-u")) != NULL) + xecfg.ctxlen = strtoul(optarg, NULL, 10); if (o->word_diff) init_diff_words_data(&ecbdata, o, one, two); xdi_diff_outf(&mf1, &mf2, fn_out_consume, &ecbdata, @@ -3614,17 +3615,17 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) options->output_format |= DIFF_FORMAT_SHORTSTAT; else if (!strcmp(arg, "-X") || !strcmp(arg, "--dirstat")) return parse_dirstat_opt(options, ""); - else if (starts_with(arg, "-X")) - return parse_dirstat_opt(options, arg + 2); - else if (starts_with(arg, "--dirstat=")) - return parse_dirstat_opt(options, arg + 10); + else if ((optarg = skip_prefix(arg, "-X")) != NULL) + return parse_dirstat_opt(options, optarg); + else if ((optarg = skip_prefix(arg, "--dirstat=")) != NULL) + return parse_dirstat_opt(options, optarg); else if (!strcmp(arg, "--cumulative")) return parse_dirstat_opt(options, "cumulative"); else if (!strcmp(arg, "--dirstat-by-file")) return parse_dirstat_opt(options, "files"); - else if (starts_with(arg, "--dirstat-by-file=")) { + else if ((optarg = skip_prefix(arg, "--dirstat-by-file=")) != NULL) { parse_dirstat_opt(options, "files"); - return parse_dirstat_opt(options, arg + 18); + return parse_dirstat_opt(options, optarg); } else if (!strcmp(arg, "--check")) options->output_format |= DIFF_FORMAT_CHECKDIFF; @@ -3674,9 +3675,9 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) DIFF_OPT_CLR(options, RENAME_EMPTY); else if (!strcmp(arg, "--relative")) DIFF_OPT_SET(options, RELATIVE_NAME); - else if (starts_with(arg, "--relative=")) { + else if ((optarg = skip_prefix(arg, "--relative=")) != NULL) { DIFF_OPT_SET(options, RELATIVE_NAME); - options->prefix = arg + 11; + options->prefix = optarg; } /* xdiff options */ @@ -3727,8 +3728,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) DIFF_OPT_CLR(options, FOLLOW_RENAMES); else if (!strcmp(arg, "--color")) options->use_color = 1; - else if (starts_with(arg, "--color=")) { - int value = git_config_colorbool(NULL, arg+8); + else if ((optarg = skip_prefix(arg, "--color=")) != NULL) { + int value = git_config_colorbool(NULL, optarg); if (value < 0) return error("option `color' expects \"always\", \"auto\", or \"never\""); options->use_color = value; @@ -3739,17 +3740,17 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) options->use_color = 1; options->word_diff = DIFF_WORDS_COLOR; } - else if (starts_with(arg, "--color-words=")) { + else if ((optarg = skip_prefix(arg, "--color-words=")) != NULL) { options->use_color = 1; options->word_diff = DIFF_WORDS_COLOR; - options->word_regex = arg + 14; + options->word_regex = optarg; } else if (!strcmp(arg, "--word-diff")) { if (options->word_diff == DIFF_WORDS_NONE) options->word_diff = DIFF_WORDS_PLAIN; } - else if (starts_with(arg, "--word-diff=")) { - const char *type = arg + 12; + else if ((optarg = skip_prefix(arg, "--word-diff=")) != NULL) { + const char *type = optarg; if (!strcmp(type, "plain")) options->word_diff = DIFF_WORDS_PLAIN; else if (!strcmp(type, "color")) { @@ -3784,13 +3785,13 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) else if (!strcmp(arg, "--ignore-submodules")) { DIFF_OPT_SET(options, OVERRIDE_SUBMODULE_CONFIG); handle_ignore_submodules_arg(options, "all"); - } else if (starts_with(arg, "--ignore-submodules=")) { + } else if ((optarg = skip_prefix(arg, "--ignore-submodules=")) != NULL) { DIFF_OPT_SET(options, OVERRIDE_SUBMODULE_CONFIG); - handle_ignore_submodules_arg(options, arg + 20); + handle_ignore_submodules_arg(options, optarg); } else if (!strcmp(arg, "--submodule")) DIFF_OPT_SET(options, SUBMODULE_LOG); - else if (starts_with(arg, "--submodule=")) - return parse_submodule_opt(options, arg + 12); + else if ((optarg = skip_prefix(arg, "--submodule=")) != NULL) + return parse_submodule_opt(options, optarg); /* misc options */ else if (!strcmp(arg, "-z")) @@ -3825,8 +3826,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) } else if (!strcmp(arg, "--abbrev")) options->abbrev = DEFAULT_ABBREV; - else if (starts_with(arg, "--abbrev=")) { - options->abbrev = strtoul(arg + 9, NULL, 10); + else if ((optarg = skip_prefix(arg, "--abbrev=")) != NULL) { + options->abbrev = strtoul(optarg, NULL, 10); if (options->abbrev < MINIMUM_ABBREV) options->abbrev = MINIMUM_ABBREV; else if (40 < options->abbrev) diff --git a/git.c b/git.c index 3799514..35fda7e 100644 --- a/git.c +++ b/git.c @@ -40,6 +40,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) while (*argc > 0) { const char *cmd = (*argv)[0]; + const char *optarg; if (cmd[0] != '-') break; @@ -92,8 +93,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) *envchanged = 1; (*argv)++; (*argc)--; - } else if (starts_with(cmd, "--git-dir=")) { - setenv(GIT_DIR_ENVIRONMENT, cmd + 10, 1); + } else if ((optarg = skip_prefix(cmd, "--git-dir=")) != NULL) { + setenv(GIT_DIR_ENVIRONMENT, optarg, 1); if (envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--namespace")) { @@ -106,8 +107,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) *envchanged = 1; (*argv)++; (*argc)--; - } else if (starts_with(cmd, "--namespace=")) { - setenv(GIT_NAMESPACE_ENVIRONMENT, cmd + 12, 1); + } else if ((optarg = skip_prefix(cmd, "--namespace=")) != NULL) { + setenv(GIT_NAMESPACE_ENVIRONMENT, optarg, 1); if (envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--work-tree")) { @@ -120,8 +121,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) *envchanged = 1; (*argv)++; (*argc)--; - } else if (starts_with(cmd, "--work-tree=")) { - setenv(GIT_WORK_TREE_ENVIRONMENT, cmd + 12, 1); + } else if ((optarg = skip_prefix(cmd, "--work-tree=")) != NULL) { + setenv(GIT_WORK_TREE_ENVIRONMENT, optarg, 1); if (envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--bare")) { diff --git a/merge-recursive.c b/merge-recursive.c index a18bd15..ba7ecb6 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -2055,6 +2055,7 @@ void init_merge_options(struct merge_options *o) int parse_merge_opt(struct merge_options *o, const char *s) { + const char *optarg; if (!s || !*s) return -1; if (!strcmp(s, "ours")) @@ -2063,14 +2064,14 @@ int parse_merge_opt(struct merge_options *o, const char *s) o->recursive_variant = MERGE_RECURSIVE_THEIRS; else if (!strcmp(s, "subtree")) o->subtree_shift = ""; - else if (starts_with(s, "subtree=")) - o->subtree_shift = s + strlen("subtree="); + else if ((optarg = skip_prefix(s, "subtree=")) != NULL) + o->subtree_shift = optarg; else if (!strcmp(s, "patience")) o->xdl_opts = DIFF_WITH_ALG(o, PATIENCE_DIFF); else if (!strcmp(s, "histogram")) o->xdl_opts = DIFF_WITH_ALG(o, HISTOGRAM_DIFF); - else if (starts_with(s, "diff-algorithm=")) { - long value = parse_algorithm_value(s + strlen("diff-algorithm=")); + else if ((optarg = skip_prefix(s, "diff-algorithm=")) != NULL) { + long value = parse_algorithm_value(optarg); if (value < 0) return -1; /* clear out previous settings */ @@ -2088,8 +2089,8 @@ int parse_merge_opt(struct merge_options *o, const char *s) o->renormalize = 1; else if (!strcmp(s, "no-renormalize")) o->renormalize = 0; - else if (starts_with(s, "rename-threshold=")) { - const char *score = s + strlen("rename-threshold="); + else if ((optarg = skip_prefix(s, "rename-threshold=")) != NULL) { + const char *score = optarg; if ((o->rename_score = parse_rename_score(&score)) == -1 || *score != 0) return -1; } diff --git a/revision.c b/revision.c index a68fde6..94b66e8 100644 --- a/revision.c +++ b/revision.c @@ -1652,8 +1652,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->max_count = atoi(argv[1]); revs->no_walk = 0; return 2; - } else if (starts_with(arg, "-n")) { - revs->max_count = atoi(arg + 2); + } else if ((optarg = skip_prefix(arg, "-n")) != NULL) { + revs->max_count = atoi(optarg); revs->no_walk = 0; } else if ((argcount = parse_long_opt("max-age", argv, &optarg))) { revs->max_age = atoi(optarg); @@ -1712,11 +1712,11 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg } else if (!strcmp(arg, "--author-date-order")) { revs->sort_order = REV_SORT_BY_AUTHOR_DATE; revs->topo_order = 1; - } else if (starts_with(arg, "--early-output")) { + } else if ((optarg = skip_prefix(arg, "--early-output")) != NULL) { int count = 100; - switch (arg[14]) { + switch (optarg[0]) { case '=': - count = atoi(arg+15); + count = atoi(optarg + 1); /* Fallthrough */ case 0: revs->topo_order = 1; @@ -1737,12 +1737,12 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->min_parents = 2; } else if (!strcmp(arg, "--no-merges")) { revs->max_parents = 1; - } else if (starts_with(arg, "--min-parents=")) { - revs->min_parents = atoi(arg+14); + } else if ((optarg = skip_prefix(arg, "--min-parents=")) != NULL) { + revs->min_parents = atoi(optarg); } else if (starts_with(arg, "--no-min-parents")) { revs->min_parents = 0; - } else if (starts_with(arg, "--max-parents=")) { - revs->max_parents = atoi(arg+14); + } else if ((optarg = skip_prefix(arg, "--max-parents=")) != NULL) { + revs->max_parents = atoi(optarg); } else if (starts_with(arg, "--no-max-parents")) { revs->max_parents = -1; } else if (!strcmp(arg, "--boundary")) { @@ -1818,32 +1818,30 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->verbose_header = 1; revs->pretty_given = 1; get_commit_format(arg+8, revs); - } else if (starts_with(arg, "--pretty=") || starts_with(arg, "--format=")) { + } else if ((optarg = skip_prefix(arg, "--pretty=")) != NULL || + (optarg = skip_prefix(arg, "--format=")) != NULL) { /* * Detached form ("--pretty X" as opposed to "--pretty=X") * not allowed, since the argument is optional. */ revs->verbose_header = 1; revs->pretty_given = 1; - get_commit_format(arg+9, revs); + get_commit_format(optarg, revs); } else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) { revs->show_notes = 1; revs->show_notes_given = 1; revs->notes_opt.use_default_notes = 1; } else if (!strcmp(arg, "--show-signature")) { revs->show_signature = 1; - } else if (starts_with(arg, "--show-notes=") || - starts_with(arg, "--notes=")) { + } else if ((optarg = skip_prefix(arg, "--show-notes=")) != NULL || + (optarg = skip_prefix(arg, "--notes=")) != NULL) { struct strbuf buf = STRBUF_INIT; revs->show_notes = 1; revs->show_notes_given = 1; - if (starts_with(arg, "--show-notes")) { - if (revs->notes_opt.use_default_notes < 0) - revs->notes_opt.use_default_notes = 1; - strbuf_addstr(&buf, arg+13); - } - else - strbuf_addstr(&buf, arg+8); + if (starts_with(arg, "--show-notes") && + revs->notes_opt.use_default_notes < 0) + revs->notes_opt.use_default_notes = 1; + strbuf_addstr(&buf, optarg); expand_notes_ref(&buf); string_list_append(&revs->notes_opt.extra_notes_refs, strbuf_detach(&buf, NULL)); @@ -1880,8 +1878,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->abbrev = 0; } else if (!strcmp(arg, "--abbrev")) { revs->abbrev = DEFAULT_ABBREV; - } else if (starts_with(arg, "--abbrev=")) { - revs->abbrev = strtoul(arg + 9, NULL, 10); + } else if ((optarg = skip_prefix(arg, "--abbrev=")) != NULL) { + revs->abbrev = strtoul(optarg, NULL, 10); if (revs->abbrev < MINIMUM_ABBREV) revs->abbrev = MINIMUM_ABBREV; else if (revs->abbrev > 40) @@ -2027,20 +2025,20 @@ static int handle_revision_pseudo_opt(const char *submodule, } else if ((argcount = parse_long_opt("exclude", argv, &optarg))) { add_ref_exclusion(&revs->ref_excludes, optarg); return argcount; - } else if (starts_with(arg, "--branches=")) { + } else if ((optarg = skip_prefix(arg, "--branches=")) != NULL) { struct all_refs_cb cb; init_all_refs_cb(&cb, revs, *flags); - for_each_glob_ref_in(handle_one_ref, arg + 11, "refs/heads/", &cb); + for_each_glob_ref_in(handle_one_ref, optarg, "refs/heads/", &cb); clear_ref_exclusion(&revs->ref_excludes); - } else if (starts_with(arg, "--tags=")) { + } else if ((optarg = skip_prefix(arg, "--tags=")) != NULL) { struct all_refs_cb cb; init_all_refs_cb(&cb, revs, *flags); - for_each_glob_ref_in(handle_one_ref, arg + 7, "refs/tags/", &cb); + for_each_glob_ref_in(handle_one_ref, optarg, "refs/tags/", &cb); clear_ref_exclusion(&revs->ref_excludes); - } else if (starts_with(arg, "--remotes=")) { + } else if ((optarg = skip_prefix(arg, "--remotes=")) != NULL) { struct all_refs_cb cb; init_all_refs_cb(&cb, revs, *flags); - for_each_glob_ref_in(handle_one_ref, arg + 10, "refs/remotes/", &cb); + for_each_glob_ref_in(handle_one_ref, optarg, "refs/remotes/", &cb); clear_ref_exclusion(&revs->ref_excludes); } else if (!strcmp(arg, "--reflog")) { handle_reflog(revs, *flags); @@ -2048,14 +2046,14 @@ static int handle_revision_pseudo_opt(const char *submodule, *flags ^= UNINTERESTING | BOTTOM; } else if (!strcmp(arg, "--no-walk")) { revs->no_walk = REVISION_WALK_NO_WALK_SORTED; - } else if (starts_with(arg, "--no-walk=")) { + } else if ((optarg = skip_prefix(arg, "--no-walk=")) != NULL) { /* * Detached form ("--no-walk X" as opposed to "--no-walk=X") * not allowed, since the argument is optional. */ - if (!strcmp(arg + 10, "sorted")) + if (!strcmp(optarg, "sorted")) revs->no_walk = REVISION_WALK_NO_WALK_SORTED; - else if (!strcmp(arg + 10, "unsorted")) + else if (!strcmp(optarg, "unsorted")) revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED; else return error("invalid argument to --no-walk"); diff --git a/upload-pack.c b/upload-pack.c index ec56cdb..8523b42 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -799,6 +799,7 @@ int main(int argc, char **argv) for (i = 1; i < argc; i++) { char *arg = argv[i]; + const char *optarg; if (arg[0] != '-') break; @@ -814,8 +815,8 @@ int main(int argc, char **argv) strict = 1; continue; } - if (starts_with(arg, "--timeout=")) { - timeout = atoi(arg+10); + if ((optarg = skip_prefix(arg, "--timeout=")) != NULL) { + timeout = atoi(optarg); daemon_mode = 1; continue; } -- 1.8.5.1.208.g019362e -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html