v1-0007-Fix-the-last-remaining-callers-relying-on-setloca.patch
text/x-patch
Filename: v1-0007-Fix-the-last-remaining-callers-relying-on-setloca.patch
Type: text/x-patch
Part: 6
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v1-0007
Subject: Fix the last remaining callers relying on setlocale().
| File | + | − |
|---|---|---|
| configure | 1 | 1 |
| configure.ac | 2 | 0 |
| meson.build | 2 | 0 |
| src/backend/tsearch/wparser_def.c | 38 | 2 |
| src/include/pg_config.h.in | 6 | 0 |
From 0fb479743de60a59c9139d27d981881f337becb2 Mon Sep 17 00:00:00 2001
From: Jeff Davis <jeff@j-davis.com>
Date: Fri, 6 Jun 2025 14:17:33 -0700
Subject: [PATCH v1 7/8] Fix the last remaining callers relying on setlocale().
---
configure | 2 +-
configure.ac | 2 ++
meson.build | 2 ++
src/backend/tsearch/wparser_def.c | 40 +++++++++++++++++++++++++++++--
src/include/pg_config.h.in | 6 +++++
5 files changed, 49 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index 4f15347cc95..2660c29e0d2 100755
--- a/configure
+++ b/configure
@@ -15616,7 +15616,7 @@ fi
LIBS_including_readline="$LIBS"
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
-for ac_func in backtrace_symbols copyfile copy_file_range elf_aux_info getauxval getifaddrs getpeerucred inet_pton kqueue localeconv_l mbstowcs_l posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l
+for ac_func in backtrace_symbols copyfile copy_file_range elf_aux_info getauxval getifaddrs getpeerucred inet_pton iswxdigit_l isxdigit_l kqueue localeconv_l mbstowcs_l posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
diff --git a/configure.ac b/configure.ac
index 4b8335dc613..2d16c5fd43f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1789,6 +1789,8 @@ AC_CHECK_FUNCS(m4_normalize([
getifaddrs
getpeerucred
inet_pton
+ iswxdigit_l
+ isxdigit_l
kqueue
localeconv_l
mbstowcs_l
diff --git a/meson.build b/meson.build
index d142e3e408b..0bd6f9f2076 100644
--- a/meson.build
+++ b/meson.build
@@ -2880,6 +2880,8 @@ func_checks = [
['getpeerucred'],
['inet_aton'],
['inet_pton'],
+ ['iswxdigit_l'],
+ ['isxdigit_l'],
['kqueue'],
['localeconv_l'],
['mbstowcs_l'],
diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c
index 79bcd32a063..0fe90b7ad8d 100644
--- a/src/backend/tsearch/wparser_def.c
+++ b/src/backend/tsearch/wparser_def.c
@@ -411,6 +411,40 @@ TParserCopyClose(TParser *prs)
}
+#ifndef HAVE_ISXDIGIT_L
+static int
+isxdigit_l(wint_t wc, locale_t loc)
+{
+#ifdef WIN32
+ return _isxdigit_l(wc, loc);
+#else
+ size_t result;
+ locale_t save_locale = uselocale(loc);
+
+ result = isxdigit(wc);
+ uselocale(save_locale);
+ return result;
+#endif
+}
+#endif
+#ifndef HAVE_ISWXDIGIT_L
+static int
+iswxdigit_l(wint_t wc, locale_t loc)
+{
+#ifdef WIN32
+ return _iswxdigit_l(wc, loc);
+#else
+ size_t result;
+ locale_t save_locale = uselocale(loc);
+
+ result = iswxdigit(wc);
+ uselocale(save_locale);
+ return result;
+#endif
+}
+#endif
+
+
/*
* Character-type support functions, equivalent to is* macros, but
* working with any possible encodings and locales. Notes:
@@ -436,9 +470,11 @@ p_is##type(TParser *prs) \
return nonascii; \
return is##type(c); \
} \
- return isw##type(*(prs->wstr + prs->state->poschar)); \
+ return isw##type##_l(*(prs->wstr + prs->state->poschar), \
+ global_lc_ctype); \
} \
- return is##type(*(unsigned char *) (prs->str + prs->state->posbyte)); \
+ return is##type##_l(*(unsigned char *) (prs->str + prs->state->posbyte), \
+ global_lc_ctype); \
} \
\
static int \
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 726a7c1be1f..f06396c94f4 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -229,6 +229,12 @@
/* Define to 1 if you have the global variable 'int timezone'. */
#undef HAVE_INT_TIMEZONE
+/* Define to 1 if you have the `iswxdigit_l' function. */
+#undef HAVE_ISWXDIGIT_L
+
+/* Define to 1 if you have the `isxdigit_l' function. */
+#undef HAVE_ISXDIGIT_L
+
/* Define to 1 if __builtin_constant_p(x) implies "i"(x) acceptance. */
#undef HAVE_I_CONSTRAINT__BUILTIN_CONSTANT_P
--
2.43.0