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:
parent
598019769c
commit
116fb64e43
@ -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;
|
||||||
|
6
apply.c
6
apply.c
@ -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) {
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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[] = {
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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, "-"))
|
||||||
|
2
cache.h
2
cache.h
@ -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,
|
||||||
|
@ -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
4
diff.c
@ -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);
|
||||||
|
@ -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,
|
||||||
|
2
setup.c
2
setup.c
@ -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))
|
||||||
|
@ -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)))
|
||||||
|
Loading…
Reference in New Issue
Block a user