From: Josh Triplett <josh@xxxxxxxxxxxxxxxx> Several variants of the for_each_ref functions call do_for_each_ref with both a fixed string prefix and the hardcoded length of that prefix. Furthermore, for_each_ref and for_each_ref_submodule passed "refs/" but a length of 0, which caused do_for_each_ref to ignore the "refs/". Change do_for_each_ref to use prefixcmp instead, and change the for_each_ref variants to call for_each_ref_in with the prefix they actually want. Leave the separate "trim" parameter for callers that want to require a prefix but not strip off that prefix. Commit by Josh Triplett and Jamey Sharp. Signed-off-by: Josh Triplett <josh@xxxxxxxxxxxxxxxx> Signed-off-by: Jamey Sharp <jamey@xxxxxxxxxxx> --- With this change the "trim" parameter always equals strlen(base), but we use trim=0 again in a later patch in this series. refs.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/refs.c b/refs.c index e3c0511..60cebe6 100644 --- a/refs.c +++ b/refs.c @@ -584,7 +584,7 @@ int read_ref(const char *ref, unsigned char *sha1) static int do_one_ref(const char *base, each_ref_fn fn, int trim, int flags, void *cb_data, struct ref_list *entry) { - if (strncmp(base, entry->name, trim)) + if (prefixcmp(entry->name, base)) return 0; if (!(flags & DO_FOR_EACH_INCLUDE_BROKEN)) { @@ -728,12 +728,12 @@ int head_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) int for_each_ref(each_ref_fn fn, void *cb_data) { - return do_for_each_ref(NULL, "refs/", fn, 0, 0, cb_data); + return for_each_ref_in("", fn, cb_data); } int for_each_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) { - return do_for_each_ref(submodule, "refs/", fn, 0, 0, cb_data); + return for_each_ref_in_submodule(submodule, "", fn, cb_data); } int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data) @@ -779,7 +779,7 @@ int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *c int for_each_replace_ref(each_ref_fn fn, void *cb_data) { - return do_for_each_ref(NULL, "refs/replace/", fn, 13, 0, cb_data); + return for_each_ref_in("refs/replace/", fn, cb_data); } int for_each_glob_ref_in(each_ref_fn fn, const char *pattern, @@ -819,7 +819,7 @@ int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data) int for_each_rawref(each_ref_fn fn, void *cb_data) { - return do_for_each_ref(NULL, "refs/", fn, 0, + return do_for_each_ref(NULL, "", fn, 0, DO_FOR_EACH_INCLUDE_BROKEN, cb_data); } -- 1.7.5.3 -- 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