Re: setlocale: Silence a -Wdiscarded-qualifiers warning on Windows.

Bruno Haible via Gnulib discussion list <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Organization GNU
Message-ID <8483961.JRmrKFJ9eK@nimes>
Collin Funk wrote:
> > But we can add the intended return type in Gnulib. Done as follows. This
> > patch removes two casts, instead of adding a cast.
> 
> I considered suggesting this as well for the same reason you mention,
> i.e., the standard saying the returned string cannot be modified. But I
> mistakenly assumed you would not want to diverge from the standardized
> prototype.

We had some (conditional) change of return type from 'char *' to 'const char *',
or from 'void *' to 'const void *', in functions like strchr and memchr,
and although it was a bit of a hassle for the people who maintain very old
packages, it was a worthwhile modernization.

In POSIX, the following functions are marked with
  "The application shall not modify the string returned."
and could therefore be modernized:
  ctermid
  dlerror
  getgrent
  getgrgid, getgrnam
  gethostent
  getlogin
  getnetent, getnetbyaddr, getnetbyname
  getprotoent, getprotobyname, getprotobynumber
  getpwent, getpwnam, getpwuid
  getservent, getservbyname, getservbyport
  localeconv
  nl_langinfo, nl_langinfo_l
  ptsname
  setlocale
  strerror, strerror_l
  strsignal
  ttyname
  *gettext, *gettext_l

> I vaguely remember
> POSIX being willing to change the return type of gettext to be "const
> char *" for similar reasons

That would be useful too, yes.

> Perhaps it is worth bringing this up with the ISO C people.

Yes, that would be useful, both for setlocale() and for localeconv().

Bruno
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.