]> git.ipfire.org Git - thirdparty/git.git/commitdiff
object-file: make `buf` parameter of `index_mem()` a constant
authorPatrick Steinhardt <ps@pks.im>
Fri, 7 Jun 2024 06:38:35 +0000 (08:38 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2024 17:30:52 +0000 (10:30 -0700)
The `buf` parameter of `index_mem()` is a non-constant string. This will
break once we enable `-Wwrite-strings` because we also pass constants
from at least one callsite.

Adapt the parameter to be a constant. As we cannot free the buffer
without casting now, this also requires us to move the lifetime of the
nested buffer around.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
object-file.c

index 08c00dcc0275b9ad81b85564466e5a659a4c8e77..0b58751f94cbd8c7667028d6d2dfb00bb1df5fad 100644 (file)
@@ -2484,12 +2484,13 @@ static int hash_format_check_report(struct fsck_options *opts UNUSED,
 }
 
 static int index_mem(struct index_state *istate,
-                    struct object_id *oid, void *buf, size_t size,
+                    struct object_id *oid,
+                    const void *buf, size_t size,
                     enum object_type type,
                     const char *path, unsigned flags)
 {
+       struct strbuf nbuf = STRBUF_INIT;
        int ret = 0;
-       int re_allocated = 0;
        int write_object = flags & HASH_WRITE_OBJECT;
 
        if (!type)
@@ -2499,11 +2500,10 @@ static int index_mem(struct index_state *istate,
         * Convert blobs to git internal format
         */
        if ((type == OBJ_BLOB) && path) {
-               struct strbuf nbuf = STRBUF_INIT;
                if (convert_to_git(istate, path, buf, size, &nbuf,
                                   get_conv_flags(flags))) {
-                       buf = strbuf_detach(&nbuf, &size);
-                       re_allocated = 1;
+                       buf = nbuf.buf;
+                       size = nbuf.len;
                }
        }
        if (flags & HASH_FORMAT_CHECK) {
@@ -2520,8 +2520,8 @@ static int index_mem(struct index_state *istate,
                ret = write_object_file(buf, size, type, oid);
        else
                hash_object_file(the_hash_algo, buf, size, type, oid);
-       if (re_allocated)
-               free(buf);
+
+       strbuf_release(&nbuf);
        return ret;
 }