refs/files-backend: drop const to fix strchr() warning

In show_one_reflog_ent(), we're fed a writable strbuf buffer, which we
parse into the various reflog components. We write a NUL over email_end
to tie off one of the fields, and thus email_end must be non-const.

But with a C23 implementation of libc, strchr() will now complain when
assigning the result to a non-const pointer from a const one. So we can
fix this by making the source pointer non-const.

But there's a catch. We derive that source pointer by parsing the line
with parse_oid_hex_algop(), which requires a const pointer for its
out-parameter. We can work around that by teaching it to use our
CONST_OUTPARAM() trick, just like skip_prefix().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2026-04-02 00:15:16 -04:00
committed by Junio C Hamano
parent 8a0566b42b
commit f1b8a4d108
3 changed files with 8 additions and 6 deletions

6
hex.c
View File

@@ -54,9 +54,9 @@ int get_oid_hex(const char *hex, struct object_id *oid)
return get_oid_hex_algop(hex, oid, the_hash_algo);
}
int parse_oid_hex_algop(const char *hex, struct object_id *oid,
const char **end,
const struct git_hash_algo *algop)
int parse_oid_hex_algop_impl(const char *hex, struct object_id *oid,
const char **end,
const struct git_hash_algo *algop)
{
int ret = get_oid_hex_algop(hex, oid, algop);
if (!ret)

6
hex.h
View File

@@ -40,8 +40,10 @@ char *oid_to_hex(const struct object_id *oid); /* same static buffer */
* other invalid character. end is only updated on success; otherwise, it is
* unmodified.
*/
int parse_oid_hex_algop(const char *hex, struct object_id *oid, const char **end,
const struct git_hash_algo *algo);
#define parse_oid_hex_algop(hex, oid, end, algo) \
parse_oid_hex_algop_impl((hex), (oid), CONST_OUTPARAM((hex), (end)), (algo))
int parse_oid_hex_algop_impl(const char *hex, struct object_id *oid, const char **end,
const struct git_hash_algo *algo);
/*
* These functions work like get_oid_hex and parse_oid_hex, but they will parse

View File

@@ -2190,7 +2190,7 @@ static int show_one_reflog_ent(struct files_ref_store *refs,
char *email_end, *message;
timestamp_t timestamp;
int tz;
const char *p = sb->buf;
char *p = sb->buf;
/* old SP new SP name <email> SP time TAB msg LF */
if (!sb->len || sb->buf[sb->len - 1] != '\n' ||