aboutsummaryrefslogtreecommitdiff
path: root/ref-filter.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2026-02-15 04:02:23 -0500
committerJunio C Hamano <gitster@pobox.com>2026-02-17 09:45:29 -0800
commit87cb6dc9b0832683a31d0c3126ecad4ad444489c (patch)
treecfa609f251ac0cf159f15deca7aae992aad9c440 /ref-filter.c
parent5ec4c22e49839c2eeb319070cde14ddbea3d1adb (diff)
downloadgit-87cb6dc9b0832683a31d0c3126ecad4ad444489c.tar.xz
ref-filter: simplify lstrip_ref_components() memory handling
We're walking forward in the string, skipping path components from left-to-right. So when we've stripped as much as we want, the pointer we have is a complete NUL-terminated string and we can just return it (after duplicating it, of course). So there is no need for a temporary allocated string. But we do make an extra temporary copy due to f0062d3b74 (ref-filter: free item->value and item->value->s, 2018-10-18). This is probably from cargo-culting the technique used in rstrip_ref_components(), which _does_ need a separate string (since it is stripping from the end and ties off the temporary string with a NUL). Let's drop the extra allocation. This is slightly more efficient, but more importantly makes the code much simpler. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'ref-filter.c')
-rw-r--r--ref-filter.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/ref-filter.c b/ref-filter.c
index ff14ac53de..f5f0cb4ad6 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2196,13 +2196,10 @@ static int normalize_component_count(const char *refname, int len)
static const char *lstrip_ref_components(const char *refname, int len)
{
int remaining = normalize_component_count(refname, len);
- const char *start = xstrdup(refname);
- const char *to_free = start;
while (remaining > 0) {
- switch (*start++) {
+ switch (*refname++) {
case '\0':
- free((char *)to_free);
return xstrdup("");
case '/':
remaining--;
@@ -2210,9 +2207,7 @@ static const char *lstrip_ref_components(const char *refname, int len)
}
}
- start = xstrdup(start);
- free((char *)to_free);
- return start;
+ return xstrdup(refname);
}
static const char *rstrip_ref_components(const char *refname, int len)