Cope if platform declares mbstowcs_l(), but not locale_t, in .
authorTom Lane
Tue, 15 Mar 2016 17:19:57 +0000 (13:19 -0400)
committerTom Lane
Tue, 15 Mar 2016 17:19:57 +0000 (13:19 -0400)
commit0e9b89986b7ced6daffdf14638a25a35c45423ff
treeb2cf23786b3e90e795fd6166123c834db854a0eb
parent101fd9349eddb7e9ed84a239145d5230a9bc7336
Cope if platform declares mbstowcs_l(), but not locale_t, in .

Previously, we included  only if necessary to get the definition
of type locale_t.  According to notes in PGAC_TYPE_LOCALE_T, this is
important because on some versions of glibc that file supplies an
incompatible declaration of locale_t.  (This info may be obsolete, because
on my RHEL6 box that seems to be the *only* definition of locale_t; but
there may still be glibc's in the wild for which it's a live concern.)

It turns out though that on FreeBSD and maybe other BSDen, you can get
locale_t from stdlib.h or locale.h but mbstowcs_l() and friends only from
.  This was leaving us compiling calls to mbstowcs_l() and
friends with no visible prototype, which causes a warning and could
possibly cause actual trouble, since it's not declared to return int.

Hence, adjust the configure checks so that we'll include 
either if it's necessary to get type locale_t or if it's necessary to
get a declaration of mbstowcs_l().

Report and patch by Aleksander Alekseev, somewhat whacked around by me.
Back-patch to all supported branches, since we have been using
mbstowcs_l() since 9.1.
config/c-library.m4
configure
configure.in
src/include/pg_config.h.in
src/include/pg_config.h.win32
src/include/utils/pg_locale.h