33#define MAX_MULTIBYTE_CHAR_LEN 4
44#define LC_CNS11643_1 0x95
45#define LC_CNS11643_2 0x96
46#define LC_CNS11643_3 0xf6
47#define LC_CNS11643_4 0xf7
48#define LC_CNS11643_5 0xf8
49#define LC_CNS11643_6 0xf9
50#define LC_CNS11643_7 0xfa
55#define ISSJISHEAD(c) (((c) >= 0x81 && (c) <= 0x9f) || ((c) >= 0xe0 && (c) <= 0xfc))
56#define ISSJISTAIL(c) (((c) >= 0x40 && (c) <= 0x7e) || ((c) >= 0x80 && (c) <= 0xfc))
125#define PG_ENCODING_BE_LAST PG_KOI8U
127#define PG_UNUSED_ENCODING(_enc) \
128 ((_enc) == PG_UNUSED_1)
134#define PG_VALID_BE_ENCODING(_enc) \
135 ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST && !PG_UNUSED_ENCODING(_enc))
137#define PG_ENCODING_IS_CLIENT_ONLY(_enc) \
138 ((_enc) > PG_ENCODING_BE_LAST && (_enc) < _PG_LAST_ENCODING_)
140#define PG_VALID_ENCODING(_enc) \
141 ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_ && !PG_UNUSED_ENCODING(_enc))
144#define PG_VALID_FE_ENCODING(_enc) PG_VALID_ENCODING(_enc)
155#define MAX_CONVERSION_GROWTH 4
173#define MAX_CONVERSION_INPUT_LENGTH 16
182#define MAX_UNICODE_EQUIVALENT_STRING 16
360#define CHECK_ENCODING_CONVERSION_ARGS(srcencoding,destencoding) \
361 check_encoding_conversion_args(PG_GETARG_INT32(0), \
362 PG_GETARG_INT32(1), \
363 PG_GETARG_INT32(4), \
374 return (
c > 0 &&
c <= 0x10FFFF);
380 return (
c >= 0xD800 &&
c <= 0xDBFF);
386 return (
c >= 0xDC00 &&
c <= 0xDFFF);
389static inline char32_t
392 return ((first & 0x3FF) << 10) + 0x10000 + (second & 0x3FF);
401static inline char32_t
404 if ((*
c & 0x80) == 0)
405 return (
char32_t)
c[0];
406 else if ((*
c & 0xe0) == 0xc0)
407 return (
char32_t) (((
c[0] & 0x1f) << 6) |
409 else if ((*
c & 0xf0) == 0xe0)
410 return (
char32_t) (((
c[0] & 0x0f) << 12) |
411 ((
c[1] & 0x3f) << 6) |
413 else if ((*
c & 0xf8) == 0xf0)
414 return (
char32_t) (((
c[0] & 0x07) << 18) |
415 ((
c[1] & 0x3f) << 12) |
416 ((
c[2] & 0x3f) << 6) |
427static inline unsigned char *
439 else if (
c <= 0xFFFF)
466 else if (
c <= 0xFFFF)
481#if defined(USE_PRIVATE_ENCODING_FUNCS) || !defined(FRONTEND)
482#define pg_char_to_encoding pg_char_to_encoding_private
483#define pg_encoding_to_char pg_encoding_to_char_private
484#define pg_valid_server_encoding pg_valid_server_encoding_private
485#define pg_valid_server_encoding_id pg_valid_server_encoding_id_private
486#define pg_utf_mblen pg_utf_mblen_private
574 unsigned char *src,
int srclen,
575 unsigned char *dest,
int destlen,
586extern unsigned short BIG5toCNS(
unsigned short big5,
unsigned char *
lc);
587extern unsigned short CNStoBIG5(
unsigned short cns,
unsigned char lc);
618extern int local2local(
const unsigned char *l,
unsigned char *p,
int len,
620 const unsigned char *tab,
bool noError);
static rewind_source * source
int pg_encoding_mblen_bounded(int encoding, const char *mbstr)
bool pg_utf8_islegal(const unsigned char *source, int length)
char * pg_client_to_server(const char *s, int len)
int GetDatabaseEncoding(void)
int pg_encoding_wchar2mb_with_len(int encoding, const pg_wchar *from, char *to, int len)
int UtfToLocal(const unsigned char *utf, int len, unsigned char *iso, const pg_mb_radix_tree *map, const pg_utf_to_local_combined *cmap, int cmapsize, utf_local_conversion_func conv_func, int encoding, bool noError)
int pg_mblen_cstr(const char *mbstr)
uint32(* utf_local_conversion_func)(uint32 code)
static bool is_utf16_surrogate_first(char32_t c)
int(* wchar2mb_with_len_converter)(const pg_wchar *from, unsigned char *to, int len)
static unsigned char * unicode_to_utf8(char32_t c, unsigned char *utf8string)
int pg_verify_mbstr_len(int encoding, const char *mbstr, int len, bool noError)
void InitializeClientEncoding(void)
int pg_dsplen(const char *mbstr)
int pg_mbstrlen_with_len(const char *mbstr, int limit)
mbcharacter_incrementer pg_database_encoding_character_incrementer(void)
void pg_encoding_set_invalid(int encoding, char *dst)
int pg_wchar2mb_with_len(const pg_wchar *from, char *to, int len)
int pg_encoding_mblen_or_incomplete(int encoding, const char *mbstr, size_t remaining)
static bool is_utf16_surrogate_second(char32_t c)
int pg_mb2wchar(const char *from, pg_wchar *to)
bool(* mbcharacter_incrementer)(unsigned char *mbstr, int len)
char * pg_any_to_server(const char *s, int len, int encoding)
int(* mbchar_verifier)(const unsigned char *mbstr, int len)
int pg_mblen_unbounded(const char *mbstr)
const char * get_encoding_name_for_icu(int encoding)
int pg_mbcharcliplen(const char *mbstr, int len, int limit)
static char32_t surrogate_pair_to_codepoint(char16_t first, char16_t second)
bool pg_unicode_to_server_noerror(char32_t c, unsigned char *s)
int pg_mblen_range(const char *mbstr, const char *end)
unsigned char * pg_do_encoding_conversion(unsigned char *src, int len, int src_encoding, int dest_encoding)
unsigned short CNStoBIG5(unsigned short cns, unsigned char lc)
size_t pg_wchar_strlen(const pg_wchar *str)
int pg_wchar2mb(const pg_wchar *from, char *to)
PGDLLIMPORT const pg_enc2name pg_enc2name_tbl[]
int pg_mbstrlen(const char *mbstr)
bool pg_verify_mbstr(int encoding, const char *mbstr, int len, bool noError)
PGDLLIMPORT const char * pg_enc2gettext_tbl[]
bool pg_verifymbstr(const char *mbstr, int len, bool noError)
int LocalToUtf(const unsigned char *iso, int len, unsigned char *utf, const pg_mb_radix_tree *map, const pg_local_to_utf_combined *cmap, int cmapsize, utf_local_conversion_func conv_func, int encoding, bool noError)
int pg_mbcliplen(const char *mbstr, int len, int limit)
int GetMessageEncoding(void)
int pg_mblen_with_len(const char *mbstr, int limit)
int pg_do_encoding_conversion_buf(Oid proc, int src_encoding, int dest_encoding, unsigned char *src, int srclen, unsigned char *dest, int destlen, bool noError)
const char * GetDatabaseEncodingName(void)
int SetClientEncoding(int encoding)
void SetMessageEncoding(int encoding)
char * pg_server_to_client(const char *s, int len)
static char32_t utf8_to_unicode(const unsigned char *c)
void check_encoding_conversion_args(int src_encoding, int dest_encoding, int len, int expected_src_encoding, int expected_dest_encoding)
int pg_database_encoding_max_length(void)
int PrepareClientEncoding(int encoding)
int pg_valid_client_encoding(const char *name)
static bool is_valid_unicode_codepoint(char32_t c)
int pg_encoding_dsplen(int encoding, const char *mbstr)
int pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2)
unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc)
#define pg_encoding_to_char
#define pg_valid_server_encoding_id
int pg_encoding_verifymbstr(int encoding, const char *mbstr, int len)
int pg_get_client_encoding(void)
pg_noreturn void report_invalid_encoding(int encoding, const char *mbstr, int len)
void pg_unicode_to_server(char32_t c, unsigned char *s)
#define pg_valid_server_encoding
bool is_encoding_supported_by_icu(int encoding)
pg_noreturn void report_untranslatable_char(int src_encoding, int dest_encoding, const char *mbstr, int len)
int(* mb2wchar_with_len_converter)(const unsigned char *from, pg_wchar *to, int len)
char * pg_server_to_any(const char *s, int len, int encoding)
#define pg_char_to_encoding
static int unicode_utf8len(char32_t c)
int(* mbstr_verifier)(const unsigned char *mbstr, int len)
int local2local(const unsigned char *l, unsigned char *p, int len, int src_encoding, int dest_encoding, const unsigned char *tab, bool noError)
int pg_encoding_max_length(int encoding)
int pg_encoding_mblen(int encoding, const char *mbstr)
PGDLLIMPORT const pg_wchar_tbl pg_wchar_table[]
int pg_wchar_strncmp(const pg_wchar *s1, const pg_wchar *s2, size_t n)
void SetDatabaseEncoding(int encoding)
int pg_encoding_mbcliplen(int encoding, const char *mbstr, int len, int limit)
const char * pg_get_client_encoding_name(void)
int pg_char_and_wchar_strncmp(const char *s1, const pg_wchar *s2, size_t n)
int pg_encoding_verifymbchar(int encoding, const char *mbstr, int len)
int pg_encoding_mb2wchar_with_len(int encoding, const char *from, pg_wchar *to, int len)
int(* mbdisplaylen_converter)(const unsigned char *mbstr)
int pg_mb2wchar_with_len(const char *from, pg_wchar *to, int len)
int pg_mblen(const char *mbstr)
int(* mblen_converter)(const unsigned char *mbstr)
mbstr_verifier mbverifystr
wchar2mb_with_len_converter wchar2mb_with_len
mb2wchar_with_len_converter mb2wchar_with_len
mbdisplaylen_converter dsplen
mbchar_verifier mbverifychar