Re: git: f1d98862044f - main - libc: getopt{,_long}: Const correctness for C23
Mark Millard <[email protected]> Mon, 3 Aug 2026 08:06:48 -0700
| Newsgroups | gmane.os.freebsd.devel.cvs.src,gmane.os.freebsd.current.scm |
|---|---|
| Message-ID | <[email protected]> |
On 8/3/26 07:30, Lexi Winter wrote: > The branch main has been updated by ivy: > > URL: https://cgit.FreeBSD.org/src/commit/?id=f1d98862044f7748c6f930e9d4339abc166a5b16 > > commit f1d98862044f7748c6f930e9d4339abc166a5b16 > Author: Lexi Winter <[email protected]> > AuthorDate: 2026-08-03 14:02:51 +0000 > Commit: Lexi Winter <[email protected]> > CommitDate: 2026-08-03 14:02:51 +0000 > > libc: getopt{,_long}: Const correctness for C23 > > On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() > now implements the C23 behaviour where passing a const pointer to > strchr() also returns a const pointer. A note on the terminology in this and the related commits: "const char *NAME;" is a (non-const) pointer to a const char, not a const pointer to a (non-const) char. In short: pointer to const is now being put to use, not const pointer. > This breaks getopt during > the bootstrap build, since it assumes the return value is always > a mutable pointer. > > Since the pointed-to value is never modified, fix this by making > the pointer const. > > MFC after: 1 week > Reviewed by: emaste > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D58488 > --- > lib/libc/stdlib/getopt.c | 2 +- > lib/libc/stdlib/getopt_long.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/libc/stdlib/getopt.c b/lib/libc/stdlib/getopt.c > index 2b5e3fa69032..e1edc5a3ee83 100644 > --- a/lib/libc/stdlib/getopt.c > +++ b/lib/libc/stdlib/getopt.c > @@ -57,7 +57,7 @@ int > getopt(int nargc, char * const nargv[], const char *ostr) > { > static char *place = EMSG; /* option letter processing */ > - char *oli; /* option letter list index */ > + const char *oli; /* option letter list index */ > > if (optreset || *place == 0) { /* update scanning pointer */ > optreset = 0; > diff --git a/lib/libc/stdlib/getopt_long.c b/lib/libc/stdlib/getopt_long.c > index 5cf6a55649bd..99be520fe332 100644 > --- a/lib/libc/stdlib/getopt_long.c > +++ b/lib/libc/stdlib/getopt_long.c > @@ -349,7 +349,7 @@ static int > getopt_internal(int nargc, char * const *nargv, const char *options, > const struct option *long_options, int *idx, int flags) > { > - char *oli; /* option letter list index */ > + const char *oli; /* option letter list index */ > int optchar, short_too; > static int posixly_correct = -1; > > > -- === Mark Millard marklmi at yahoo.com