When we do:
char *cp = strchr(argv[i], '=');
it implicitly removes the constness from argv[i]. We need "cp" to remain
writable (since we overwrite it with a NUL). In theory we should be able
to drop the const from argv[i], because it is a sub-pointer into our
duplicated pager_env variable.
But we get it from split_cmdline(), which uses the traditional "const
char **" type for argv. This is overly limiting, but changing it would
be awkward for all the other callers of split_cmdline().
Let's do an explicit cast with a note about why it is OK. This is enough
to silence compiler warnings about the implicit const problems.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
static void setup_pager_env(struct strvec *env)
{
- const char **argv;
+ char **argv;
int i;
char *pager_env = xstrdup(PAGER_ENV);
- int n = split_cmdline(pager_env, &argv);
+ /* split_cmdline splits in place, so we know the result is writable */
+ int n = split_cmdline(pager_env, (const char ***)&argv);
if (n < 0)
die("malformed build-time PAGER_ENV: %s",