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>

Jeff King committed Apr 2, 2026 at 00:15 UTC f1b8a4d10888922eacaa9552d9925d3330ed5d8b
3 files changed +8 -6
hex.c
+3 -3
@@ -54,9 +54,9 @@ int get_oid_hex(const char *hex, struct object_id *oid)
54 return get_oid_hex_algop(hex, oid, the_hash_algo);
55 }
56
57 -int parse_oid_hex_algop(const char *hex, struct object_id *oid,
58 - const char **end,
59 - const struct git_hash_algo *algop)
57 +int parse_oid_hex_algop_impl(const char *hex, struct object_id *oid,
58 + const char **end,
59 + const struct git_hash_algo *algop)
60 {
61 int ret = get_oid_hex_algop(hex, oid, algop);
62 if (!ret)
hex.h
+4 -2
@@ -40,8 +40,10 @@ char *oid_to_hex(const struct object_id *oid); /* same static buffer */
40 * other invalid character. end is only updated on success; otherwise, it is
41 * unmodified.
42 */
43 -int parse_oid_hex_algop(const char *hex, struct object_id *oid, const char **end,
44 - const struct git_hash_algo *algo);
43 +#define parse_oid_hex_algop(hex, oid, end, algo) \
44 + parse_oid_hex_algop_impl((hex), (oid), CONST_OUTPARAM((hex), (end)), (algo))
45 +int parse_oid_hex_algop_impl(const char *hex, struct object_id *oid, const char **end,
46 + const struct git_hash_algo *algo);
47
48 /*
49 * These functions work like get_oid_hex and parse_oid_hex, but they will parse
refs/files-backend.c
+1 -1
@@ -2190,7 +2190,7 @@ static int show_one_reflog_ent(struct files_ref_store *refs,
2190 char *email_end, *message;
2191 timestamp_t timestamp;
2192 int tz;
2193 - const char *p = sb->buf;
2193 + char *p = sb->buf;
2194
2195 /* old SP new SP name <email> SP time TAB msg LF */
2196 if (!sb->len || sb->buf[sb->len - 1] != '\n' ||