On Mon Jun 12, 2023 at 4:13 AM CDT, Heikki Linnakangas wrote: > There are a few uselocale() calls in ecpg, and they are protected by > HAVE_USELOCALE. Interestingly, the calls in pg_locale.c are not, but > they are protected by HAVE_LOCALE_T. Seems a little inconsistent.
Patch is attached. CC-ing hackers. -- Tristan Partin Neon (https://neon.tech)
From 02a2cdb83405b5aecaec2af02e379a81161f8372 Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 14 Jun 2023 11:36:00 -0500 Subject: [PATCH v1] Make uselocale protection more consistent In ecpg, uselocale uses are protected by checking if HAVE_USELOCALE is defined. Use the same check in pg_locale.c. Since HAVE_USELOCALE implies HAVE_LOCALE_T, the code should be the same on _all_ platforms that Postgres supports. Otherwise, I am sure there would have been a bug report with pg_locale.c failing to build due to the system having locale_t, but not uselocale. --- src/backend/utils/adt/pg_locale.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 31e3b16ae0..3585afb298 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -2972,7 +2972,7 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) } else { -#ifdef HAVE_LOCALE_T +#ifdef HAVE_USELOCALE #ifdef HAVE_WCSTOMBS_L /* Use wcstombs_l for nondefault locales */ result = wcstombs_l(to, from, tolen, locale->info.lt); @@ -2984,11 +2984,11 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, pg_locale_t locale) uselocale(save_locale); #endif /* HAVE_WCSTOMBS_L */ -#else /* !HAVE_LOCALE_T */ - /* Can't have locale != 0 without HAVE_LOCALE_T */ +#else /* !HAVE_USELOCALE */ + /* Can't have locale != 0 without HAVE_LOCALE_T, which HAVE_USELOCALE implies */ elog(ERROR, "wcstombs_l is not available"); result = 0; /* keep compiler quiet */ -#endif /* HAVE_LOCALE_T */ +#endif /* HAVE_USELOCALE */ } return result; @@ -3049,7 +3049,7 @@ char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen, } else { -#ifdef HAVE_LOCALE_T +#ifdef HAVE_USELOCALE #ifdef HAVE_MBSTOWCS_L /* Use mbstowcs_l for nondefault locales */ result = mbstowcs_l(to, str, tolen, locale->info.lt); @@ -3061,11 +3061,11 @@ char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen, uselocale(save_locale); #endif /* HAVE_MBSTOWCS_L */ -#else /* !HAVE_LOCALE_T */ - /* Can't have locale != 0 without HAVE_LOCALE_T */ +#else /* !HAVE_USELOCALE */ + /* Can't have locale != 0 without HAVE_LOCALE_T, which HAVE_USELOCALE implies */ elog(ERROR, "mbstowcs_l is not available"); result = 0; /* keep compiler quiet */ -#endif /* HAVE_LOCALE_T */ +#endif /* HAVE_USELOCALE */ } pfree(str); -- Tristan Partin Neon (https://neon.tech)