From 1280b29fa4d73e2bede285ed793a041f1c09b59e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 22 Sep 2025 14:47:48 +0200 Subject: [PATCH 01/23] C11 anonymous unions [pg_locale_t] --- src/backend/utils/adt/pg_locale_builtin.c | 20 +++---- src/backend/utils/adt/pg_locale_icu.c | 18 +++--- src/backend/utils/adt/pg_locale_libc.c | 70 +++++++++++------------ src/include/utils/pg_locale.h | 2 +- 4 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/backend/utils/adt/pg_locale_builtin.c b/src/backend/utils/adt/pg_locale_builtin.c index 0c9fbdb40f2..526ab3c6711 100644 --- a/src/backend/utils/adt/pg_locale_builtin.c +++ b/src/backend/utils/adt/pg_locale_builtin.c @@ -72,7 +72,7 @@ strlower_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { return unicode_strlower(dest, destsize, src, srclen, - locale->info.builtin.casemap_full); + locale->builtin.casemap_full); } static size_t @@ -83,13 +83,13 @@ strtitle_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, .str = src, .len = srclen, .offset = 0, - .posix = !locale->info.builtin.casemap_full, + .posix = !locale->builtin.casemap_full, .init = false, .prev_alnum = false, }; return unicode_strtitle(dest, destsize, src, srclen, - locale->info.builtin.casemap_full, + locale->builtin.casemap_full, initcap_wbnext, &wbstate); } @@ -98,7 +98,7 @@ strupper_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { return unicode_strupper(dest, destsize, src, srclen, - locale->info.builtin.casemap_full); + locale->builtin.casemap_full); } static size_t @@ -106,13 +106,13 @@ strfold_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { return unicode_strfold(dest, destsize, src, srclen, - locale->info.builtin.casemap_full); + locale->builtin.casemap_full); } static bool wc_isdigit_builtin(pg_wchar wc, pg_locale_t locale) { - return pg_u_isdigit(wc, !locale->info.builtin.casemap_full); + return pg_u_isdigit(wc, !locale->builtin.casemap_full); } static bool @@ -124,7 +124,7 @@ wc_isalpha_builtin(pg_wchar wc, pg_locale_t locale) static bool wc_isalnum_builtin(pg_wchar wc, pg_locale_t locale) { - return pg_u_isalnum(wc, !locale->info.builtin.casemap_full); + return pg_u_isalnum(wc, !locale->builtin.casemap_full); } static bool @@ -154,7 +154,7 @@ wc_isprint_builtin(pg_wchar wc, pg_locale_t locale) static bool wc_ispunct_builtin(pg_wchar wc, pg_locale_t locale) { - return pg_u_ispunct(wc, !locale->info.builtin.casemap_full); + return pg_u_ispunct(wc, !locale->builtin.casemap_full); } static bool @@ -238,8 +238,8 @@ create_pg_locale_builtin(Oid collid, MemoryContext context) result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct)); - result->info.builtin.locale = MemoryContextStrdup(context, locstr); - result->info.builtin.casemap_full = (strcmp(locstr, "PG_UNICODE_FAST") == 0); + result->builtin.locale = MemoryContextStrdup(context, locstr); + result->builtin.casemap_full = (strcmp(locstr, "PG_UNICODE_FAST") == 0); result->deterministic = true; result->collate_is_c = true; result->ctype_is_c = (strcmp(locstr, "C") == 0); diff --git a/src/backend/utils/adt/pg_locale_icu.c b/src/backend/utils/adt/pg_locale_icu.c index 96741e08269..9f0b4eead73 100644 --- a/src/backend/utils/adt/pg_locale_icu.c +++ b/src/backend/utils/adt/pg_locale_icu.c @@ -290,8 +290,8 @@ create_pg_locale_icu(Oid collid, MemoryContext context) collator = make_icu_collator(iculocstr, icurules); result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct)); - result->info.icu.locale = MemoryContextStrdup(context, iculocstr); - result->info.icu.ucol = collator; + result->icu.locale = MemoryContextStrdup(context, iculocstr); + result->icu.ucol = collator; result->deterministic = deterministic; result->collate_is_c = false; result->ctype_is_c = false; @@ -571,7 +571,7 @@ strncoll_icu_utf8(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2 Assert(GetDatabaseEncoding() == PG_UTF8); status = U_ZERO_ERROR; - result = ucol_strcollUTF8(locale->info.icu.ucol, + result = ucol_strcollUTF8(locale->icu.ucol, arg1, len1, arg2, len2, &status); @@ -608,7 +608,7 @@ strnxfrm_icu(char *dest, size_t destsize, const char *src, ssize_t srclen, ulen = uchar_convert(icu_converter, uchar, ulen + 1, src, srclen); - result_bsize = ucol_getSortKey(locale->info.icu.ucol, + result_bsize = ucol_getSortKey(locale->icu.ucol, uchar, ulen, (uint8_t *) dest, destsize); @@ -644,7 +644,7 @@ strnxfrm_prefix_icu_utf8(char *dest, size_t destsize, uiter_setUTF8(&iter, src, srclen); state[0] = state[1] = 0; /* won't need that again */ status = U_ZERO_ERROR; - result = ucol_nextSortKeyPart(locale->info.icu.ucol, + result = ucol_nextSortKeyPart(locale->icu.ucol, &iter, state, (uint8_t *) dest, @@ -755,7 +755,7 @@ icu_convert_case(ICU_Convert_Func func, pg_locale_t mylocale, *buff_dest = palloc(len_dest * sizeof(**buff_dest)); status = U_ZERO_ERROR; len_dest = func(*buff_dest, len_dest, buff_source, len_source, - mylocale->info.icu.locale, &status); + mylocale->icu.locale, &status); if (status == U_BUFFER_OVERFLOW_ERROR) { /* try again with adjusted length */ @@ -763,7 +763,7 @@ icu_convert_case(ICU_Convert_Func func, pg_locale_t mylocale, *buff_dest = palloc(len_dest * sizeof(**buff_dest)); status = U_ZERO_ERROR; len_dest = func(*buff_dest, len_dest, buff_source, len_source, - mylocale->info.icu.locale, &status); + mylocale->icu.locale, &status); } if (U_FAILURE(status)) ereport(ERROR, @@ -859,7 +859,7 @@ strncoll_icu(const char *arg1, ssize_t len1, ulen1 = uchar_convert(icu_converter, uchar1, ulen1 + 1, arg1, len1); ulen2 = uchar_convert(icu_converter, uchar2, ulen2 + 1, arg2, len2); - result = ucol_strcoll(locale->info.icu.ucol, + result = ucol_strcoll(locale->icu.ucol, uchar1, ulen1, uchar2, ulen2); @@ -904,7 +904,7 @@ strnxfrm_prefix_icu(char *dest, size_t destsize, uiter_setString(&iter, uchar, ulen); state[0] = state[1] = 0; /* won't need that again */ status = U_ZERO_ERROR; - result_bsize = ucol_nextSortKeyPart(locale->info.icu.ucol, + result_bsize = ucol_nextSortKeyPart(locale->icu.ucol, &iter, state, (uint8_t *) dest, diff --git a/src/backend/utils/adt/pg_locale_libc.c b/src/backend/utils/adt/pg_locale_libc.c index 8d88b53c375..f56b5dbdd37 100644 --- a/src/backend/utils/adt/pg_locale_libc.c +++ b/src/backend/utils/adt/pg_locale_libc.c @@ -121,116 +121,116 @@ static size_t strupper_libc_mb(char *dest, size_t destsize, static bool wc_isdigit_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isdigit_l((unsigned char) wc, locale->info.lt); + return isdigit_l((unsigned char) wc, locale->lt); } static bool wc_isalpha_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isalpha_l((unsigned char) wc, locale->info.lt); + return isalpha_l((unsigned char) wc, locale->lt); } static bool wc_isalnum_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isalnum_l((unsigned char) wc, locale->info.lt); + return isalnum_l((unsigned char) wc, locale->lt); } static bool wc_isupper_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isupper_l((unsigned char) wc, locale->info.lt); + return isupper_l((unsigned char) wc, locale->lt); } static bool wc_islower_libc_sb(pg_wchar wc, pg_locale_t locale) { - return islower_l((unsigned char) wc, locale->info.lt); + return islower_l((unsigned char) wc, locale->lt); } static bool wc_isgraph_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isgraph_l((unsigned char) wc, locale->info.lt); + return isgraph_l((unsigned char) wc, locale->lt); } static bool wc_isprint_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isprint_l((unsigned char) wc, locale->info.lt); + return isprint_l((unsigned char) wc, locale->lt); } static bool wc_ispunct_libc_sb(pg_wchar wc, pg_locale_t locale) { - return ispunct_l((unsigned char) wc, locale->info.lt); + return ispunct_l((unsigned char) wc, locale->lt); } static bool wc_isspace_libc_sb(pg_wchar wc, pg_locale_t locale) { - return isspace_l((unsigned char) wc, locale->info.lt); + return isspace_l((unsigned char) wc, locale->lt); } static bool wc_isdigit_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswdigit_l((wint_t) wc, locale->info.lt); + return iswdigit_l((wint_t) wc, locale->lt); } static bool wc_isalpha_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswalpha_l((wint_t) wc, locale->info.lt); + return iswalpha_l((wint_t) wc, locale->lt); } static bool wc_isalnum_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswalnum_l((wint_t) wc, locale->info.lt); + return iswalnum_l((wint_t) wc, locale->lt); } static bool wc_isupper_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswupper_l((wint_t) wc, locale->info.lt); + return iswupper_l((wint_t) wc, locale->lt); } static bool wc_islower_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswlower_l((wint_t) wc, locale->info.lt); + return iswlower_l((wint_t) wc, locale->lt); } static bool wc_isgraph_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswgraph_l((wint_t) wc, locale->info.lt); + return iswgraph_l((wint_t) wc, locale->lt); } static bool wc_isprint_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswprint_l((wint_t) wc, locale->info.lt); + return iswprint_l((wint_t) wc, locale->lt); } static bool wc_ispunct_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswpunct_l((wint_t) wc, locale->info.lt); + return iswpunct_l((wint_t) wc, locale->lt); } static bool wc_isspace_libc_mb(pg_wchar wc, pg_locale_t locale) { - return iswspace_l((wint_t) wc, locale->info.lt); + return iswspace_l((wint_t) wc, locale->lt); } static char char_tolower_libc(unsigned char ch, pg_locale_t locale) { Assert(pg_database_encoding_max_length() == 1); - return tolower_l(ch, locale->info.lt); + return tolower_l(ch, locale->lt); } static bool @@ -241,7 +241,7 @@ char_is_cased_libc(char ch, pg_locale_t locale) if (is_multibyte && IS_HIGHBIT_SET(ch)) return true; else - return isalpha_l((unsigned char) ch, locale->info.lt); + return isalpha_l((unsigned char) ch, locale->lt); } static pg_wchar @@ -253,7 +253,7 @@ toupper_libc_sb(pg_wchar wc, pg_locale_t locale) if (locale->is_default && wc <= (pg_wchar) 127) return pg_ascii_toupper((unsigned char) wc); if (wc <= (pg_wchar) UCHAR_MAX) - return toupper_l((unsigned char) wc, locale->info.lt); + return toupper_l((unsigned char) wc, locale->lt); else return wc; } @@ -267,7 +267,7 @@ toupper_libc_mb(pg_wchar wc, pg_locale_t locale) if (locale->is_default && wc <= (pg_wchar) 127) return pg_ascii_toupper((unsigned char) wc); if (sizeof(wchar_t) >= 4 || wc <= (pg_wchar) 0xFFFF) - return towupper_l((wint_t) wc, locale->info.lt); + return towupper_l((wint_t) wc, locale->lt); else return wc; } @@ -281,7 +281,7 @@ tolower_libc_sb(pg_wchar wc, pg_locale_t locale) if (locale->is_default && wc <= (pg_wchar) 127) return pg_ascii_tolower((unsigned char) wc); if (wc <= (pg_wchar) UCHAR_MAX) - return tolower_l((unsigned char) wc, locale->info.lt); + return tolower_l((unsigned char) wc, locale->lt); else return wc; } @@ -295,7 +295,7 @@ tolower_libc_mb(pg_wchar wc, pg_locale_t locale) if (locale->is_default && wc <= (pg_wchar) 127) return pg_ascii_tolower((unsigned char) wc); if (sizeof(wchar_t) >= 4 || wc <= (pg_wchar) 0xFFFF) - return towlower_l((wint_t) wc, locale->info.lt); + return towlower_l((wint_t) wc, locale->lt); else return wc; } @@ -406,7 +406,7 @@ strlower_libc_sb(char *dest, size_t destsize, const char *src, ssize_t srclen, if (srclen + 1 <= destsize) { - locale_t loc = locale->info.lt; + locale_t loc = locale->lt; char *p; if (srclen + 1 > destsize) @@ -438,7 +438,7 @@ static size_t strlower_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { - locale_t loc = locale->info.lt; + locale_t loc = locale->lt; size_t result_size; wchar_t *workspace; char *result; @@ -491,7 +491,7 @@ strtitle_libc_sb(char *dest, size_t destsize, const char *src, ssize_t srclen, if (srclen + 1 <= destsize) { - locale_t loc = locale->info.lt; + locale_t loc = locale->lt; int wasalnum = false; char *p; @@ -532,7 +532,7 @@ static size_t strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { - locale_t loc = locale->info.lt; + locale_t loc = locale->lt; int wasalnum = false; size_t result_size; wchar_t *workspace; @@ -592,7 +592,7 @@ strupper_libc_sb(char *dest, size_t destsize, const char *src, ssize_t srclen, if (srclen + 1 <= destsize) { - locale_t loc = locale->info.lt; + locale_t loc = locale->lt; char *p; memcpy(dest, src, srclen); @@ -621,7 +621,7 @@ static size_t strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, pg_locale_t locale) { - locale_t loc = locale->info.lt; + locale_t loc = locale->lt; size_t result_size; wchar_t *workspace; char *result; @@ -718,7 +718,7 @@ create_pg_locale_libc(Oid collid, MemoryContext context) (strcmp(collate, "POSIX") == 0); result->ctype_is_c = (strcmp(ctype, "C") == 0) || (strcmp(ctype, "POSIX") == 0); - result->info.lt = loc; + result->lt = loc; if (!result->collate_is_c) { #ifdef WIN32 @@ -862,7 +862,7 @@ strncoll_libc(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2, arg2n = buf2; } - result = strcoll_l(arg1n, arg2n, locale->info.lt); + result = strcoll_l(arg1n, arg2n, locale->lt); if (buf != sbuf) pfree(buf); @@ -887,7 +887,7 @@ strnxfrm_libc(char *dest, size_t destsize, const char *src, ssize_t srclen, size_t result; if (srclen == -1) - return strxfrm_l(dest, src, destsize, locale->info.lt); + return strxfrm_l(dest, src, destsize, locale->lt); if (bufsize > TEXTBUFLEN) buf = palloc(bufsize); @@ -896,7 +896,7 @@ strnxfrm_libc(char *dest, size_t destsize, const char *src, ssize_t srclen, memcpy(buf, src, srclen); buf[srclen] = '\0'; - result = strxfrm_l(dest, buf, destsize, locale->info.lt); + result = strxfrm_l(dest, buf, destsize, locale->lt); if (buf != sbuf) pfree(buf); @@ -1038,7 +1038,7 @@ strncoll_libc_win32_utf8(const char *arg1, ssize_t len1, const char *arg2, ((LPWSTR) a2p)[r] = 0; errno = 0; - result = wcscoll_l((LPWSTR) a1p, (LPWSTR) a2p, locale->info.lt); + result = wcscoll_l((LPWSTR) a1p, (LPWSTR) a2p, locale->lt); if (result == 2147483647) /* _NLSCMPERROR; missing from mingw headers */ ereport(ERROR, (errmsg("could not compare Unicode strings: %m"))); diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h index 2b072cafb4d..7e83594fbaf 100644 --- a/src/include/utils/pg_locale.h +++ b/src/include/utils/pg_locale.h @@ -171,7 +171,7 @@ struct pg_locale_struct UCollator *ucol; } icu; #endif - } info; + }; }; extern void init_database_collation(void); base-commit: a48d1ef58652229521ba4b5070e19f857608b22e -- 2.51.0