This is a patch which implements an issue discussed in bug #17946[0]. It doesn't fix the overarching issue of the bug, but merely a consistency issue which was found while analyzing code by Heikki. I had originally submitted the patch within that thread, but for visibility and the purposes of the commitfest, I have re-sent it in its own thread.
[0]: https://www.postgresql.org/message-id/49dfcad8-90fa-8577-008f-d142e61af...@iki.fi -- 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)