prefix_filename: drop length parameter

This function takes the prefix as a ptr/len pair, but in
every caller the length is exactly strlen(ptr). Let's
simplify the interface and just take the string. This saves
callers specifying it (and in some cases handling a NULL
prefix).

In a handful of cases we had the length already without
calling strlen, so this is technically slower. But it's not
likely to matter (after all, if the prefix is non-empty
we'll allocate and copy it into a buffer anyway).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2017-03-20 21:22:28 -04:00 committed by Junio C Hamano
parent 598019769c
commit 116fb64e43
15 changed files with 23 additions and 35 deletions

View File

@ -246,9 +246,11 @@ char *absolute_pathdup(const char *path)
return strbuf_detach(&sb, NULL); return strbuf_detach(&sb, NULL);
} }
const char *prefix_filename(const char *pfx, int pfx_len, const char *arg) const char *prefix_filename(const char *pfx, const char *arg)
{ {
static struct strbuf path = STRBUF_INIT; static struct strbuf path = STRBUF_INIT;
size_t pfx_len = pfx ? strlen(pfx) : 0;
#ifndef GIT_WINDOWS_NATIVE #ifndef GIT_WINDOWS_NATIVE
if (!pfx_len || is_absolute_path(arg)) if (!pfx_len || is_absolute_path(arg))
return arg; return arg;

View File

@ -2046,7 +2046,7 @@ static void prefix_one(struct apply_state *state, char **name)
char *old_name = *name; char *old_name = *name;
if (!old_name) if (!old_name)
return; return;
*name = xstrdup(prefix_filename(state->prefix, state->prefix_length, *name)); *name = xstrdup(prefix_filename(state->prefix, *name));
free(old_name); free(old_name);
} }
@ -4815,9 +4815,7 @@ int apply_all_patches(struct apply_state *state,
read_stdin = 0; read_stdin = 0;
continue; continue;
} else if (0 < state->prefix_length) } else if (0 < state->prefix_length)
arg = prefix_filename(state->prefix, arg = prefix_filename(state->prefix, arg);
state->prefix_length,
arg);
fd = open(arg, O_RDONLY); fd = open(arg, O_RDONLY);
if (fd < 0) { if (fd < 0) {

View File

@ -528,7 +528,6 @@ int cmd_config(int argc, const char **argv, const char *prefix)
if (!is_absolute_path(given_config_source.file) && prefix) if (!is_absolute_path(given_config_source.file) && prefix)
given_config_source.file = given_config_source.file =
xstrdup(prefix_filename(prefix, xstrdup(prefix_filename(prefix,
strlen(prefix),
given_config_source.file)); given_config_source.file));
} }

View File

@ -102,7 +102,6 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
OPT_END() OPT_END()
}; };
int i; int i;
int prefix_length = -1;
const char *errstr = NULL; const char *errstr = NULL;
argc = parse_options(argc, argv, NULL, hash_object_options, argc = parse_options(argc, argv, NULL, hash_object_options,
@ -113,9 +112,8 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
else else
prefix = setup_git_directory_gently(&nongit); prefix = setup_git_directory_gently(&nongit);
prefix_length = prefix ? strlen(prefix) : 0;
if (vpath && prefix) if (vpath && prefix)
vpath = xstrdup(prefix_filename(prefix, prefix_length, vpath)); vpath = xstrdup(prefix_filename(prefix, vpath));
git_config(git_default_config, NULL); git_config(git_default_config, NULL);
@ -146,9 +144,8 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
const char *arg = argv[i]; const char *arg = argv[i];
char *to_free = NULL; char *to_free = NULL;
if (0 <= prefix_length) if (prefix)
arg = to_free = arg = to_free = xstrdup(prefix_filename(prefix, arg));
xstrdup(prefix_filename(prefix, prefix_length, arg));
hash_object(arg, type, no_filters ? NULL : vpath ? vpath : arg, hash_object(arg, type, no_filters ? NULL : vpath ? vpath : arg,
flags, literally); flags, literally);
free(to_free); free(to_free);

View File

@ -1084,8 +1084,7 @@ static const char *set_outdir(const char *prefix, const char *output_directory)
if (!output_directory) if (!output_directory)
return prefix; return prefix;
return xstrdup(prefix_filename(prefix, outdir_offset, return xstrdup(prefix_filename(prefix, output_directory));
output_directory));
} }
static const char * const builtin_format_patch_usage[] = { static const char * const builtin_format_patch_usage[] = {

View File

@ -15,7 +15,7 @@ static char *prefix_copy(const char *prefix, const char *filename)
{ {
if (!prefix || is_absolute_path(filename)) if (!prefix || is_absolute_path(filename))
return xstrdup(filename); return xstrdup(filename);
return xstrdup(prefix_filename(prefix, strlen(prefix), filename)); return xstrdup(prefix_filename(prefix, filename));
} }
int cmd_mailinfo(int argc, const char **argv, const char *prefix) int cmd_mailinfo(int argc, const char **argv, const char *prefix)

View File

@ -28,7 +28,6 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
xmparam_t xmp = {{0}}; xmparam_t xmp = {{0}};
int ret = 0, i = 0, to_stdout = 0; int ret = 0, i = 0, to_stdout = 0;
int quiet = 0; int quiet = 0;
int prefixlen = 0;
struct option options[] = { struct option options[] = {
OPT_BOOL('p', "stdout", &to_stdout, N_("send results to standard output")), OPT_BOOL('p', "stdout", &to_stdout, N_("send results to standard output")),
OPT_SET_INT(0, "diff3", &xmp.style, N_("use a diff3 based merge"), XDL_MERGE_DIFF3), OPT_SET_INT(0, "diff3", &xmp.style, N_("use a diff3 based merge"), XDL_MERGE_DIFF3),
@ -65,11 +64,8 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
return error_errno("failed to redirect stderr to /dev/null"); return error_errno("failed to redirect stderr to /dev/null");
} }
if (prefix)
prefixlen = strlen(prefix);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
const char *fname = prefix_filename(prefix, prefixlen, argv[i]); const char *fname = prefix_filename(prefix, argv[i]);
if (!names[i]) if (!names[i])
names[i] = argv[i]; names[i] = argv[i];
if (read_mmfile(mmfs + i, fname)) if (read_mmfile(mmfs + i, fname))
@ -90,7 +86,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
if (ret >= 0) { if (ret >= 0) {
const char *filename = argv[0]; const char *filename = argv[0];
const char *fpath = prefix_filename(prefix, prefixlen, argv[0]); const char *fpath = prefix_filename(prefix, argv[0]);
FILE *f = to_stdout ? stdout : fopen(fpath, "wb"); FILE *f = to_stdout ? stdout : fopen(fpath, "wb");
if (!f) if (!f)

View File

@ -228,9 +228,7 @@ static int show_file(const char *arg, int output_prefix)
if ((filter & (DO_NONFLAGS|DO_NOREV)) == (DO_NONFLAGS|DO_NOREV)) { if ((filter & (DO_NONFLAGS|DO_NOREV)) == (DO_NONFLAGS|DO_NOREV)) {
if (output_prefix) { if (output_prefix) {
const char *prefix = startup_info->prefix; const char *prefix = startup_info->prefix;
show(prefix_filename(prefix, show(prefix_filename(prefix, arg));
prefix ? strlen(prefix) : 0,
arg));
} else } else
show(arg); show(arg);
return 1; return 1;

View File

@ -338,7 +338,7 @@ static int add(int ac, const char **av, const char *prefix)
if (ac < 1 || ac > 2) if (ac < 1 || ac > 2)
usage_with_options(worktree_usage, options); usage_with_options(worktree_usage, options);
path = prefix_filename(prefix, strlen(prefix), av[0]); path = prefix_filename(prefix, av[0]);
branch = ac < 2 ? "HEAD" : av[1]; branch = ac < 2 ? "HEAD" : av[1];
if (!strcmp(branch, "-")) if (!strcmp(branch, "-"))

View File

@ -540,7 +540,7 @@ extern char *prefix_path_gently(const char *prefix, int len, int *remaining, con
* The return value may point to static storage which will be overwritten by * The return value may point to static storage which will be overwritten by
* further calls. * further calls.
*/ */
extern const char *prefix_filename(const char *prefix, int len, const char *path); extern const char *prefix_filename(const char *prefix, const char *path);
extern int check_filename(const char *prefix, const char *name); extern int check_filename(const char *prefix, const char *name);
extern void verify_filename(const char *prefix, extern void verify_filename(const char *prefix,

View File

@ -236,7 +236,7 @@ static void fixup_paths(const char **path, struct strbuf *replacement)
void diff_no_index(struct rev_info *revs, void diff_no_index(struct rev_info *revs,
int argc, const char **argv) int argc, const char **argv)
{ {
int i, prefixlen; int i;
const char *paths[2]; const char *paths[2];
struct strbuf replacement = STRBUF_INIT; struct strbuf replacement = STRBUF_INIT;
const char *prefix = revs->prefix; const char *prefix = revs->prefix;
@ -257,7 +257,6 @@ void diff_no_index(struct rev_info *revs,
} }
} }
prefixlen = prefix ? strlen(prefix) : 0;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
const char *p = argv[argc - 2 + i]; const char *p = argv[argc - 2 + i];
if (!strcmp(p, "-")) if (!strcmp(p, "-"))
@ -266,8 +265,8 @@ void diff_no_index(struct rev_info *revs,
* path that is "-", spell it as "./-". * path that is "-", spell it as "./-".
*/ */
p = file_from_standard_input; p = file_from_standard_input;
else if (prefixlen) else if (prefix)
p = xstrdup(prefix_filename(prefix, prefixlen, p)); p = xstrdup(prefix_filename(prefix, p));
paths[i] = p; paths[i] = p;
} }

4
diff.c
View File

@ -4023,7 +4023,7 @@ int diff_opt_parse(struct diff_options *options,
else if (!strcmp(arg, "--pickaxe-regex")) else if (!strcmp(arg, "--pickaxe-regex"))
options->pickaxe_opts |= DIFF_PICKAXE_REGEX; options->pickaxe_opts |= DIFF_PICKAXE_REGEX;
else if ((argcount = short_opt('O', av, &optarg))) { else if ((argcount = short_opt('O', av, &optarg))) {
const char *path = prefix_filename(prefix, strlen(prefix), optarg); const char *path = prefix_filename(prefix, optarg);
options->orderfile = xstrdup(path); options->orderfile = xstrdup(path);
return argcount; return argcount;
} }
@ -4071,7 +4071,7 @@ int diff_opt_parse(struct diff_options *options,
else if (!strcmp(arg, "--no-function-context")) else if (!strcmp(arg, "--no-function-context"))
DIFF_OPT_CLR(options, FUNCCONTEXT); DIFF_OPT_CLR(options, FUNCCONTEXT);
else if ((argcount = parse_long_opt("output", av, &optarg))) { else if ((argcount = parse_long_opt("output", av, &optarg))) {
const char *path = prefix_filename(prefix, strlen(prefix), optarg); const char *path = prefix_filename(prefix, optarg);
options->file = fopen(path, "w"); options->file = fopen(path, "w");
if (!options->file) if (!options->file)
die_errno("Could not open '%s'", path); die_errno("Could not open '%s'", path);

View File

@ -40,7 +40,7 @@ static void fix_filename(const char *prefix, const char **file)
if (!file || !*file || !prefix || is_absolute_path(*file) if (!file || !*file || !prefix || is_absolute_path(*file)
|| !strcmp("-", *file)) || !strcmp("-", *file))
return; return;
*file = xstrdup(prefix_filename(prefix, strlen(prefix), *file)); *file = xstrdup(prefix_filename(prefix, *file));
} }
static int opt_command_mode_error(const struct option *opt, static int opt_command_mode_error(const struct option *opt,

View File

@ -142,7 +142,7 @@ int check_filename(const char *prefix, const char *arg)
return 1; return 1;
name = arg + 2; name = arg + 2;
} else if (prefix) } else if (prefix)
name = prefix_filename(prefix, strlen(prefix), arg); name = prefix_filename(prefix, arg);
else else
name = arg; name = arg;
if (!lstat(name, &st)) if (!lstat(name, &st))

View File

@ -254,7 +254,7 @@ struct worktree *find_worktree(struct worktree **list,
if ((wt = find_worktree_by_suffix(list, arg))) if ((wt = find_worktree_by_suffix(list, arg)))
return wt; return wt;
arg = prefix_filename(prefix, strlen(prefix), arg); arg = prefix_filename(prefix, arg);
path = real_pathdup(arg, 1); path = real_pathdup(arg, 1);
for (; *list; list++) for (; *list; list++)
if (!fspathcmp(path, real_path((*list)->path))) if (!fspathcmp(path, real_path((*list)->path)))