mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Make some use of anonymous unions [pg_locale_t]
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
This commit is contained in:
@@ -72,7 +72,7 @@ strlower_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
pg_locale_t locale)
|
pg_locale_t locale)
|
||||||
{
|
{
|
||||||
return unicode_strlower(dest, destsize, src, srclen,
|
return unicode_strlower(dest, destsize, src, srclen,
|
||||||
locale->info.builtin.casemap_full);
|
locale->builtin.casemap_full);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
@@ -83,13 +83,13 @@ strtitle_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
.str = src,
|
.str = src,
|
||||||
.len = srclen,
|
.len = srclen,
|
||||||
.offset = 0,
|
.offset = 0,
|
||||||
.posix = !locale->info.builtin.casemap_full,
|
.posix = !locale->builtin.casemap_full,
|
||||||
.init = false,
|
.init = false,
|
||||||
.prev_alnum = false,
|
.prev_alnum = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
return unicode_strtitle(dest, destsize, src, srclen,
|
return unicode_strtitle(dest, destsize, src, srclen,
|
||||||
locale->info.builtin.casemap_full,
|
locale->builtin.casemap_full,
|
||||||
initcap_wbnext, &wbstate);
|
initcap_wbnext, &wbstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ strupper_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
pg_locale_t locale)
|
pg_locale_t locale)
|
||||||
{
|
{
|
||||||
return unicode_strupper(dest, destsize, src, srclen,
|
return unicode_strupper(dest, destsize, src, srclen,
|
||||||
locale->info.builtin.casemap_full);
|
locale->builtin.casemap_full);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
@@ -106,13 +106,13 @@ strfold_builtin(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
pg_locale_t locale)
|
pg_locale_t locale)
|
||||||
{
|
{
|
||||||
return unicode_strfold(dest, destsize, src, srclen,
|
return unicode_strfold(dest, destsize, src, srclen,
|
||||||
locale->info.builtin.casemap_full);
|
locale->builtin.casemap_full);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
wc_isdigit_builtin(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
@@ -124,7 +124,7 @@ wc_isalpha_builtin(pg_wchar wc, pg_locale_t locale)
|
|||||||
static bool
|
static bool
|
||||||
wc_isalnum_builtin(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
@@ -154,7 +154,7 @@ wc_isprint_builtin(pg_wchar wc, pg_locale_t locale)
|
|||||||
static bool
|
static bool
|
||||||
wc_ispunct_builtin(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
@@ -238,8 +238,8 @@ create_pg_locale_builtin(Oid collid, MemoryContext context)
|
|||||||
|
|
||||||
result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct));
|
result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct));
|
||||||
|
|
||||||
result->info.builtin.locale = MemoryContextStrdup(context, locstr);
|
result->builtin.locale = MemoryContextStrdup(context, locstr);
|
||||||
result->info.builtin.casemap_full = (strcmp(locstr, "PG_UNICODE_FAST") == 0);
|
result->builtin.casemap_full = (strcmp(locstr, "PG_UNICODE_FAST") == 0);
|
||||||
result->deterministic = true;
|
result->deterministic = true;
|
||||||
result->collate_is_c = true;
|
result->collate_is_c = true;
|
||||||
result->ctype_is_c = (strcmp(locstr, "C") == 0);
|
result->ctype_is_c = (strcmp(locstr, "C") == 0);
|
||||||
|
|||||||
@@ -290,8 +290,8 @@ create_pg_locale_icu(Oid collid, MemoryContext context)
|
|||||||
collator = make_icu_collator(iculocstr, icurules);
|
collator = make_icu_collator(iculocstr, icurules);
|
||||||
|
|
||||||
result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct));
|
result = MemoryContextAllocZero(context, sizeof(struct pg_locale_struct));
|
||||||
result->info.icu.locale = MemoryContextStrdup(context, iculocstr);
|
result->icu.locale = MemoryContextStrdup(context, iculocstr);
|
||||||
result->info.icu.ucol = collator;
|
result->icu.ucol = collator;
|
||||||
result->deterministic = deterministic;
|
result->deterministic = deterministic;
|
||||||
result->collate_is_c = false;
|
result->collate_is_c = false;
|
||||||
result->ctype_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);
|
Assert(GetDatabaseEncoding() == PG_UTF8);
|
||||||
|
|
||||||
status = U_ZERO_ERROR;
|
status = U_ZERO_ERROR;
|
||||||
result = ucol_strcollUTF8(locale->info.icu.ucol,
|
result = ucol_strcollUTF8(locale->icu.ucol,
|
||||||
arg1, len1,
|
arg1, len1,
|
||||||
arg2, len2,
|
arg2, len2,
|
||||||
&status);
|
&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);
|
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,
|
uchar, ulen,
|
||||||
(uint8_t *) dest, destsize);
|
(uint8_t *) dest, destsize);
|
||||||
|
|
||||||
@@ -644,7 +644,7 @@ strnxfrm_prefix_icu_utf8(char *dest, size_t destsize,
|
|||||||
uiter_setUTF8(&iter, src, srclen);
|
uiter_setUTF8(&iter, src, srclen);
|
||||||
state[0] = state[1] = 0; /* won't need that again */
|
state[0] = state[1] = 0; /* won't need that again */
|
||||||
status = U_ZERO_ERROR;
|
status = U_ZERO_ERROR;
|
||||||
result = ucol_nextSortKeyPart(locale->info.icu.ucol,
|
result = ucol_nextSortKeyPart(locale->icu.ucol,
|
||||||
&iter,
|
&iter,
|
||||||
state,
|
state,
|
||||||
(uint8_t *) dest,
|
(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));
|
*buff_dest = palloc(len_dest * sizeof(**buff_dest));
|
||||||
status = U_ZERO_ERROR;
|
status = U_ZERO_ERROR;
|
||||||
len_dest = func(*buff_dest, len_dest, buff_source, len_source,
|
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)
|
if (status == U_BUFFER_OVERFLOW_ERROR)
|
||||||
{
|
{
|
||||||
/* try again with adjusted length */
|
/* 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));
|
*buff_dest = palloc(len_dest * sizeof(**buff_dest));
|
||||||
status = U_ZERO_ERROR;
|
status = U_ZERO_ERROR;
|
||||||
len_dest = func(*buff_dest, len_dest, buff_source, len_source,
|
len_dest = func(*buff_dest, len_dest, buff_source, len_source,
|
||||||
mylocale->info.icu.locale, &status);
|
mylocale->icu.locale, &status);
|
||||||
}
|
}
|
||||||
if (U_FAILURE(status))
|
if (U_FAILURE(status))
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
@@ -859,7 +859,7 @@ strncoll_icu(const char *arg1, ssize_t len1,
|
|||||||
ulen1 = uchar_convert(icu_converter, uchar1, ulen1 + 1, arg1, len1);
|
ulen1 = uchar_convert(icu_converter, uchar1, ulen1 + 1, arg1, len1);
|
||||||
ulen2 = uchar_convert(icu_converter, uchar2, ulen2 + 1, arg2, len2);
|
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,
|
uchar1, ulen1,
|
||||||
uchar2, ulen2);
|
uchar2, ulen2);
|
||||||
|
|
||||||
@@ -904,7 +904,7 @@ strnxfrm_prefix_icu(char *dest, size_t destsize,
|
|||||||
uiter_setString(&iter, uchar, ulen);
|
uiter_setString(&iter, uchar, ulen);
|
||||||
state[0] = state[1] = 0; /* won't need that again */
|
state[0] = state[1] = 0; /* won't need that again */
|
||||||
status = U_ZERO_ERROR;
|
status = U_ZERO_ERROR;
|
||||||
result_bsize = ucol_nextSortKeyPart(locale->info.icu.ucol,
|
result_bsize = ucol_nextSortKeyPart(locale->icu.ucol,
|
||||||
&iter,
|
&iter,
|
||||||
state,
|
state,
|
||||||
(uint8_t *) dest,
|
(uint8_t *) dest,
|
||||||
|
|||||||
@@ -121,116 +121,116 @@ static size_t strupper_libc_mb(char *dest, size_t destsize,
|
|||||||
static bool
|
static bool
|
||||||
wc_isdigit_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isalpha_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isalnum_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isupper_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_islower_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isgraph_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isprint_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_ispunct_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isspace_libc_sb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isdigit_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isalpha_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isalnum_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isupper_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_islower_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isgraph_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isprint_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_ispunct_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static bool
|
||||||
wc_isspace_libc_mb(pg_wchar wc, pg_locale_t locale)
|
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
|
static char
|
||||||
char_tolower_libc(unsigned char ch, pg_locale_t locale)
|
char_tolower_libc(unsigned char ch, pg_locale_t locale)
|
||||||
{
|
{
|
||||||
Assert(pg_database_encoding_max_length() == 1);
|
Assert(pg_database_encoding_max_length() == 1);
|
||||||
return tolower_l(ch, locale->info.lt);
|
return tolower_l(ch, locale->lt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@@ -241,7 +241,7 @@ char_is_cased_libc(char ch, pg_locale_t locale)
|
|||||||
if (is_multibyte && IS_HIGHBIT_SET(ch))
|
if (is_multibyte && IS_HIGHBIT_SET(ch))
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return isalpha_l((unsigned char) ch, locale->info.lt);
|
return isalpha_l((unsigned char) ch, locale->lt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static pg_wchar
|
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)
|
if (locale->is_default && wc <= (pg_wchar) 127)
|
||||||
return pg_ascii_toupper((unsigned char) wc);
|
return pg_ascii_toupper((unsigned char) wc);
|
||||||
if (wc <= (pg_wchar) UCHAR_MAX)
|
if (wc <= (pg_wchar) UCHAR_MAX)
|
||||||
return toupper_l((unsigned char) wc, locale->info.lt);
|
return toupper_l((unsigned char) wc, locale->lt);
|
||||||
else
|
else
|
||||||
return wc;
|
return wc;
|
||||||
}
|
}
|
||||||
@@ -267,7 +267,7 @@ toupper_libc_mb(pg_wchar wc, pg_locale_t locale)
|
|||||||
if (locale->is_default && wc <= (pg_wchar) 127)
|
if (locale->is_default && wc <= (pg_wchar) 127)
|
||||||
return pg_ascii_toupper((unsigned char) wc);
|
return pg_ascii_toupper((unsigned char) wc);
|
||||||
if (sizeof(wchar_t) >= 4 || wc <= (pg_wchar) 0xFFFF)
|
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
|
else
|
||||||
return wc;
|
return wc;
|
||||||
}
|
}
|
||||||
@@ -281,7 +281,7 @@ tolower_libc_sb(pg_wchar wc, pg_locale_t locale)
|
|||||||
if (locale->is_default && wc <= (pg_wchar) 127)
|
if (locale->is_default && wc <= (pg_wchar) 127)
|
||||||
return pg_ascii_tolower((unsigned char) wc);
|
return pg_ascii_tolower((unsigned char) wc);
|
||||||
if (wc <= (pg_wchar) UCHAR_MAX)
|
if (wc <= (pg_wchar) UCHAR_MAX)
|
||||||
return tolower_l((unsigned char) wc, locale->info.lt);
|
return tolower_l((unsigned char) wc, locale->lt);
|
||||||
else
|
else
|
||||||
return wc;
|
return wc;
|
||||||
}
|
}
|
||||||
@@ -295,7 +295,7 @@ tolower_libc_mb(pg_wchar wc, pg_locale_t locale)
|
|||||||
if (locale->is_default && wc <= (pg_wchar) 127)
|
if (locale->is_default && wc <= (pg_wchar) 127)
|
||||||
return pg_ascii_tolower((unsigned char) wc);
|
return pg_ascii_tolower((unsigned char) wc);
|
||||||
if (sizeof(wchar_t) >= 4 || wc <= (pg_wchar) 0xFFFF)
|
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
|
else
|
||||||
return wc;
|
return wc;
|
||||||
}
|
}
|
||||||
@@ -406,7 +406,7 @@ strlower_libc_sb(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
|
|
||||||
if (srclen + 1 <= destsize)
|
if (srclen + 1 <= destsize)
|
||||||
{
|
{
|
||||||
locale_t loc = locale->info.lt;
|
locale_t loc = locale->lt;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if (srclen + 1 > destsize)
|
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,
|
strlower_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
||||||
pg_locale_t locale)
|
pg_locale_t locale)
|
||||||
{
|
{
|
||||||
locale_t loc = locale->info.lt;
|
locale_t loc = locale->lt;
|
||||||
size_t result_size;
|
size_t result_size;
|
||||||
wchar_t *workspace;
|
wchar_t *workspace;
|
||||||
char *result;
|
char *result;
|
||||||
@@ -491,7 +491,7 @@ strtitle_libc_sb(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
|
|
||||||
if (srclen + 1 <= destsize)
|
if (srclen + 1 <= destsize)
|
||||||
{
|
{
|
||||||
locale_t loc = locale->info.lt;
|
locale_t loc = locale->lt;
|
||||||
int wasalnum = false;
|
int wasalnum = false;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
@@ -532,7 +532,7 @@ static size_t
|
|||||||
strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
||||||
pg_locale_t locale)
|
pg_locale_t locale)
|
||||||
{
|
{
|
||||||
locale_t loc = locale->info.lt;
|
locale_t loc = locale->lt;
|
||||||
int wasalnum = false;
|
int wasalnum = false;
|
||||||
size_t result_size;
|
size_t result_size;
|
||||||
wchar_t *workspace;
|
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)
|
if (srclen + 1 <= destsize)
|
||||||
{
|
{
|
||||||
locale_t loc = locale->info.lt;
|
locale_t loc = locale->lt;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
memcpy(dest, src, srclen);
|
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,
|
strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
||||||
pg_locale_t locale)
|
pg_locale_t locale)
|
||||||
{
|
{
|
||||||
locale_t loc = locale->info.lt;
|
locale_t loc = locale->lt;
|
||||||
size_t result_size;
|
size_t result_size;
|
||||||
wchar_t *workspace;
|
wchar_t *workspace;
|
||||||
char *result;
|
char *result;
|
||||||
@@ -718,7 +718,7 @@ create_pg_locale_libc(Oid collid, MemoryContext context)
|
|||||||
(strcmp(collate, "POSIX") == 0);
|
(strcmp(collate, "POSIX") == 0);
|
||||||
result->ctype_is_c = (strcmp(ctype, "C") == 0) ||
|
result->ctype_is_c = (strcmp(ctype, "C") == 0) ||
|
||||||
(strcmp(ctype, "POSIX") == 0);
|
(strcmp(ctype, "POSIX") == 0);
|
||||||
result->info.lt = loc;
|
result->lt = loc;
|
||||||
if (!result->collate_is_c)
|
if (!result->collate_is_c)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -862,7 +862,7 @@ strncoll_libc(const char *arg1, ssize_t len1, const char *arg2, ssize_t len2,
|
|||||||
arg2n = buf2;
|
arg2n = buf2;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = strcoll_l(arg1n, arg2n, locale->info.lt);
|
result = strcoll_l(arg1n, arg2n, locale->lt);
|
||||||
|
|
||||||
if (buf != sbuf)
|
if (buf != sbuf)
|
||||||
pfree(buf);
|
pfree(buf);
|
||||||
@@ -887,7 +887,7 @@ strnxfrm_libc(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
size_t result;
|
size_t result;
|
||||||
|
|
||||||
if (srclen == -1)
|
if (srclen == -1)
|
||||||
return strxfrm_l(dest, src, destsize, locale->info.lt);
|
return strxfrm_l(dest, src, destsize, locale->lt);
|
||||||
|
|
||||||
if (bufsize > TEXTBUFLEN)
|
if (bufsize > TEXTBUFLEN)
|
||||||
buf = palloc(bufsize);
|
buf = palloc(bufsize);
|
||||||
@@ -896,7 +896,7 @@ strnxfrm_libc(char *dest, size_t destsize, const char *src, ssize_t srclen,
|
|||||||
memcpy(buf, src, srclen);
|
memcpy(buf, src, srclen);
|
||||||
buf[srclen] = '\0';
|
buf[srclen] = '\0';
|
||||||
|
|
||||||
result = strxfrm_l(dest, buf, destsize, locale->info.lt);
|
result = strxfrm_l(dest, buf, destsize, locale->lt);
|
||||||
|
|
||||||
if (buf != sbuf)
|
if (buf != sbuf)
|
||||||
pfree(buf);
|
pfree(buf);
|
||||||
@@ -1038,7 +1038,7 @@ strncoll_libc_win32_utf8(const char *arg1, ssize_t len1, const char *arg2,
|
|||||||
((LPWSTR) a2p)[r] = 0;
|
((LPWSTR) a2p)[r] = 0;
|
||||||
|
|
||||||
errno = 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 */
|
if (result == 2147483647) /* _NLSCMPERROR; missing from mingw headers */
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not compare Unicode strings: %m")));
|
(errmsg("could not compare Unicode strings: %m")));
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ struct pg_locale_struct
|
|||||||
UCollator *ucol;
|
UCollator *ucol;
|
||||||
} icu;
|
} icu;
|
||||||
#endif
|
#endif
|
||||||
} info;
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void init_database_collation(void);
|
extern void init_database_collation(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user