From e39f86fe000e64235801bb0fbeeade09dd562e1d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 15 Mar 2016 13:19:58 -0400 Subject: 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. --- src/include/pg_config.h.in | 3 +++ src/include/pg_config.h.win32 | 3 +++ src/include/utils/pg_locale.h | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index ab662d11af2..698752177f9 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -794,6 +794,9 @@ /* Define to select Win32-style shared memory. */ #undef USE_WIN32_SHARED_MEMORY +/* Define to 1 if `wcstombs_l' requires . */ +#undef WCSTOMBS_L_IN_XLOCALE + /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 9c45e39f2da..7a960660550 100644 --- a/src/include/pg_config.h.win32 +++ b/src/include/pg_config.h.win32 @@ -650,6 +650,9 @@ /* Define to select Win32-style semaphores. */ #define USE_WIN32_SEMAPHORES +/* Define to 1 if `wcstombs_l' requires . */ +/* #undef WCSTOMBS_L_IN_XLOCALE */ + /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 3c38aa27292..b4a941a8d72 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -13,7 +13,7 @@ #define _PG_LOCALE_ #include -#ifdef LOCALE_T_IN_XLOCALE +#if defined(LOCALE_T_IN_XLOCALE) || defined(WCSTOMBS_L_IN_XLOCALE) #include #endif -- cgit v1.2.3