]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Make some use of anonymous unions [pg_locale_t]
authorPeter Eisentraut <peter@eisentraut.org>
Tue, 30 Sep 2025 10:23:47 +0000 (12:23 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Tue, 30 Sep 2025 10:35:50 +0000 (12:35 +0200)
Make some use of anonymous unions, which are allowed as of C11, as
examples and encouragement for future code, and to test compilers.

This commit changes the pg_locale_t type.

Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/f00a9968-388e-4f8c-b5ef-5102e962d997%40eisentraut.org

src/backend/utils/adt/pg_locale_builtin.c
src/backend/utils/adt/pg_locale_icu.c
src/backend/utils/adt/pg_locale_libc.c
src/include/utils/pg_locale.h

index 0c9fbdb40f2a9f2654f76627c295f313ca90496f..526ab3c6711244992c87aa71f4c1395c5845f8e3 100644 (file)
@@ -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);
index 96741e08269a4b3b559a237884a418b9859a9231..9f0b4eead73a79ab5edabd233bddbbfbcc7fac38 100644 (file)
@@ -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,
index 8d88b53c375298c036273f5d2d573ade80a45787..f56b5dbdd375646d5eaa8454ec3bb355c62d2e18 100644 (file)
@@ -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")));
index 2b072cafb4d487642ed240c5f90a7dd099813c57..7e83594fbaf64d065a1541b2c6b6c62171ac4dad 100644 (file)
@@ -171,7 +171,7 @@ struct pg_locale_struct
                        UCollator  *ucol;
                }                       icu;
 #endif
-       }                       info;
+       };
 };
 
 extern void init_database_collation(void);