This series fixes the rest of the warnings you might see on recent glibc or other C23 libc where:
const char *in = ...; char *out = strchr(in, ...);
now complains instead of quietly assigning the const pointer to a non-const one. It's all textually independent of the other fixes, but if you want a clean build you'll need the others. I think Collin's fixes have hit master already, but my jk/c23-const-preserving-fixes are still slated for 'next'.
Some of my fixes are similar to what Michael posted in:
https://lore.kernel.org/git/cover.1774537954.git.git@grubix.eu/
but for most of them I took a somewhat different approach. So this would be applied instead of those patches.
The patches are:
[01/12]: convert: add const to fix strchr() warnings [02/12]: http: add const to fix strchr() warnings [03/12]: transport-helper: drop const to fix strchr() warnings
These ones are obvious fixes that just match the type declarations
to their uses.[04/12]: pager: explicitly cast away strchr() constness [05/12]: run-command: explicitly cast away constness when assigning to void
These are ones where I think an explicit cast is the least-bad
option.[06/12]: find_last_dir_sep(): convert inline function to macro
This is the one that gets repeated a zillion times when you build
because it's in a header file. ;) It takes a slightly different
approach than Collin's in:https://lore.kernel.org/git/e6f7e2eddbc9aef1c21f661420a4b8cb9cd8e2c1.1770095829.git.collin.funk1@gmail.com/
which I think reduces the fallout through the rest of the codebase.
[07/12]: pseudo-merge: fix disk reads from find_pseudo_merge()
This one is...spicy. I think there are probably actual bugs here,
but my hope is that this takes us in the right direction (and shuts
up the warning).[08/12]: skip_prefix(): check const match between in and out params
And here is where we might get controversial. It introduces some
macro hackery that makes it safe and easy to use skip_prefix() with
const or non-const strings. I _think_ it should just work
everywhere, but I won't be surprised if some compiler somewhere
complains about the construct. Coverity does, but it is so full of
false positives that adding more is not a big deal.[09/12]: pkt-line: make packet_reader.line non-const [10/12]: range-diff: drop const to fix strstr() warnings [11/12]: http: drop const to fix strstr() warning [12/12]: refs/files-backend: drop const to fix strchr() warning
And then these are all obvious fixes that are only made possible by
the skip_prefix() magic above. Well, possible without extra ugly
casts everywhere.builtin/config.c | 7 ++++--- builtin/rev-parse.c | 40 ++++++++++++++++++++-------------------- convert.c | 3 ++- git-compat-util.h | 23 ++++++++++++++++++----- http-push.c | 2 +- pager.c | 3 ++- pseudo-merge.c | 32 +++++++++++++++++++------------- revision.c | 25 +++++++++++++++---------- run-command.c | 4 ++-- transport-helper.c | 3 ++- 10 files changed, 85 insertions(+), 57 deletions(-)
-Peff