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




Reply via email to