]> git.ipfire.org Git - thirdparty/git.git/commitdiff
run-command: explicitly cast away constness when assigning to void
authorJeff King <peff@peff.net>
Thu, 2 Apr 2026 04:15:01 +0000 (00:15 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Apr 2026 05:08:51 +0000 (22:08 -0700)
We do this:

  char *equals = strchr(*e, '=');

which implicitly removes the constness from "*e" and cause the compiler
to complain. We never write to "equals", but later assign it to a
string_list util field, which is defined as non-const "void *".

We have to cast somewhere, but doing so at the assignment to util is the
least-bad place, since that is the source of the confusion. Sadly we are
still open to accidentally writing to the string via the util pointer,
but that is the cost of using void pointers, which lose all type
information.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
run-command.c

index 32c290ee6a221f90696583a7a2ec0da50a752f8d..d6980c79b356fdcc07c5042fa569e84e377ad5ee 100644 (file)
@@ -604,11 +604,11 @@ static void trace_add_env(struct strbuf *dst, const char *const *deltaenv)
        /* Last one wins, see run-command.c:prep_childenv() for context */
        for (e = deltaenv; e && *e; e++) {
                struct strbuf key = STRBUF_INIT;
-               char *equals = strchr(*e, '=');
+               const char *equals = strchr(*e, '=');
 
                if (equals) {
                        strbuf_add(&key, *e, equals - *e);
-                       string_list_insert(&envs, key.buf)->util = equals + 1;
+                       string_list_insert(&envs, key.buf)->util = (void *)(equals + 1);
                } else {
                        string_list_insert(&envs, *e)->util = NULL;
                }