Skip to content

Commit 2ec30e7

Browse files
peffgitster
authored andcommitted
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>
1 parent 87cb6dc commit 2ec30e7

1 file changed

Lines changed: 2 additions & 3 deletions

File tree

ref-filter.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,13 +2213,12 @@ static const char *lstrip_ref_components(const char *refname, int len)
22132213
static const char *rstrip_ref_components(const char *refname, int len)
22142214
{
22152215
int remaining = normalize_component_count(refname, len);
2216-
const char *start = xstrdup(refname);
2217-
const char *to_free = start;
2216+
char *start = xstrdup(refname);
22182217

22192218
while (remaining-- > 0) {
22202219
char *p = strrchr(start, '/');
22212220
if (!p) {
2222-
free((char *)to_free);
2221+
free(start);
22232222
return xstrdup("");
22242223
} else
22252224
p[0] = '\0';

0 commit comments

Comments
 (0)