|
|
|
|
@ -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"))); |
|
|
|
|
|