aboutsummaryrefslogtreecommitdiff
path: root/ref-filter.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2026-02-15 04:05:34 -0500
committerJunio C Hamano <gitster@pobox.com>2026-02-17 09:45:29 -0800
commit2ec30e71f44233b9afceda0f2992029674187674 (patch)
tree9e8d5cd76255b4bd4d40c8bed29c406461586930 /ref-filter.c
parent87cb6dc9b0832683a31d0c3126ecad4ad444489c (diff)
downloadgit-2ec30e71f44233b9afceda0f2992029674187674.tar.xz
ref-filter: simplify rstrip_ref_components() memory handling
We're stripping path components from the end of a string, which we do by assigning a NUL as we parse each component, shortening the string. This requires an extra temporary buffer to avoid munging our input string. But the way that we allocate the buffer is unusual. We have an extra "to_free" variable. Usually this is used when the access variable is conceptually const, like: const char *foo; char *to_free = NULL; if (...) foo = to_free = xstrdup(...); else foo = some_const_string; ... free(to_free); But that's not what's happening here. Our "start" variable always points to the allocated buffer, and to_free is redundant. Worse, it is marked as const itself, requiring a cast when we free it. Let's drop to_free entirely, and mark "start" as non-const, making the memory handling more clear. As a bonus, this also silences a warning from glibc-2.43 that our call to strrchr() implicitly strips away the const-ness of "start". 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.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/ref-filter.c b/ref-filter.c
index f5f0cb4ad6..9589418c25 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2213,13 +2213,12 @@ static const char *lstrip_ref_components(const char *refname, int len)
static const char *rstrip_ref_components(const char *refname, int len)
{
int remaining = normalize_component_count(refname, len);
- const char *start = xstrdup(refname);
- const char *to_free = start;
+ char *start = xstrdup(refname);
while (remaining-- > 0) {
char *p = strrchr(start, '/');
if (!p) {
- free((char *)to_free);
+ free(start);
return xstrdup("");
} else
p[0] = '\0';