Go to the source code of this file.
Data Structures | |
| struct | pg_encname |
| struct | pg_enc2name |
| struct | pg_enc2gettext |
| struct | pg_wchar_tbl |
| struct | pg_utf_to_local |
| struct | pg_local_to_utf |
| struct | pg_utf_to_local_combined |
| struct | pg_local_to_utf_combined |
Defines | |
| #define | MAX_MULTIBYTE_CHAR_LEN 4 |
| #define | SS2 0x8e |
| #define | SS3 0x8f |
| #define | ISSJISHEAD(c) (((c) >= 0x81 && (c) <= 0x9f) || ((c) >= 0xe0 && (c) <= 0xfc)) |
| #define | ISSJISTAIL(c) (((c) >= 0x40 && (c) <= 0x7e) || ((c) >= 0x80 && (c) <= 0xfc)) |
| #define | LC_ISO8859_1 0x81 |
| #define | LC_ISO8859_2 0x82 |
| #define | LC_ISO8859_3 0x83 |
| #define | LC_ISO8859_4 0x84 |
| #define | LC_TIS620 0x85 |
| #define | LC_ISO8859_7 0x86 |
| #define | LC_ISO8859_6 0x87 |
| #define | LC_ISO8859_8 0x88 |
| #define | LC_JISX0201K 0x89 |
| #define | LC_JISX0201R 0x8a |
| #define | LC_KOI8_R 0x8b |
| #define | LC_ISO8859_5 0x8c |
| #define | LC_ISO8859_9 0x8d |
| #define | LC_ISO8859_15 0x8e |
| #define | IS_LC1(c) ((unsigned char)(c) >= 0x81 && (unsigned char)(c) <= 0x8d) |
| #define | LC_JISX0208_1978 0x90 |
| #define | LC_GB2312_80 0x91 |
| #define | LC_JISX0208 0x92 |
| #define | LC_KS5601 0x93 |
| #define | LC_JISX0212 0x94 |
| #define | LC_CNS11643_1 0x95 |
| #define | LC_CNS11643_2 0x96 |
| #define | LC_JISX0213_1 0x97 |
| #define | LC_BIG5_1 0x98 |
| #define | LC_BIG5_2 0x99 |
| #define | IS_LC2(c) ((unsigned char)(c) >= 0x90 && (unsigned char)(c) <= 0x99) |
| #define | LCPRV1_A 0x9a |
| #define | LCPRV1_B 0x9b |
| #define | IS_LCPRV1(c) ((unsigned char)(c) == LCPRV1_A || (unsigned char)(c) == LCPRV1_B) |
| #define | IS_LCPRV1_A_RANGE(c) ((unsigned char)(c) >= 0xa0 && (unsigned char)(c) <= 0xdf) |
| #define | IS_LCPRV1_B_RANGE(c) ((unsigned char)(c) >= 0xe0 && (unsigned char)(c) <= 0xef) |
| #define | LCPRV2_A 0x9c |
| #define | LCPRV2_B 0x9d |
| #define | IS_LCPRV2(c) ((unsigned char)(c) == LCPRV2_A || (unsigned char)(c) == LCPRV2_B) |
| #define | IS_LCPRV2_A_RANGE(c) ((unsigned char)(c) >= 0xf0 && (unsigned char)(c) <= 0xf4) |
| #define | IS_LCPRV2_B_RANGE(c) ((unsigned char)(c) >= 0xf5 && (unsigned char)(c) <= 0xfe) |
| #define | LC_SISHENG 0xa0 |
| #define | LC_IPA 0xa1 |
| #define | LC_VISCII_LOWER 0xa2 |
| #define | LC_VISCII_UPPER 0xa3 |
| #define | LC_ARABIC_DIGIT 0xa4 |
| #define | LC_ARABIC_1_COLUMN 0xa5 |
| #define | LC_ASCII_RIGHT_TO_LEFT 0xa6 |
| #define | LC_LAO 0xa7 |
| #define | LC_ARABIC_2_COLUMN 0xa8 |
| #define | LC_INDIAN_1_COLUMN 0xf0 |
| #define | LC_TIBETAN_1_COLUMN 0xf1 |
| #define | LC_UNICODE_SUBSET_2 0xf2 |
| #define | LC_UNICODE_SUBSET_3 0xf3 |
| #define | LC_UNICODE_SUBSET 0xf4 |
| #define | LC_ETHIOPIC 0xf5 |
| #define | LC_CNS11643_3 0xf6 |
| #define | LC_CNS11643_4 0xf7 |
| #define | LC_CNS11643_5 0xf8 |
| #define | LC_CNS11643_6 0xf9 |
| #define | LC_CNS11643_7 0xfa |
| #define | LC_INDIAN_2_COLUMN 0xfb |
| #define | LC_TIBETAN 0xfc |
| #define | PG_ENCODING_BE_LAST PG_KOI8U |
| #define | PG_VALID_BE_ENCODING(_enc) ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST) |
| #define | PG_ENCODING_IS_CLIENT_ONLY(_enc) ((_enc) > PG_ENCODING_BE_LAST && (_enc) < _PG_LAST_ENCODING_) |
| #define | PG_VALID_ENCODING(_enc) ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_) |
| #define | PG_VALID_FE_ENCODING(_enc) PG_VALID_ENCODING(_enc) |
| #define | CHECK_ENCODING_CONVERSION_ARGS(srcencoding, destencoding) |
Typedefs | |
| typedef unsigned int | pg_wchar |
| typedef enum pg_enc | pg_enc |
| typedef struct pg_encname | pg_encname |
| typedef struct pg_enc2name | pg_enc2name |
| typedef struct pg_enc2gettext | pg_enc2gettext |
| typedef int(* | mb2wchar_with_len_converter )(const unsigned char *from, pg_wchar *to, int len) |
| typedef int(* | wchar2mb_with_len_converter )(const pg_wchar *from, unsigned char *to, int len) |
| typedef int(* | mblen_converter )(const unsigned char *mbstr) |
| typedef int(* | mbdisplaylen_converter )(const unsigned char *mbstr) |
| typedef bool(* | mbcharacter_incrementer )(unsigned char *mbstr, int len) |
| typedef int(* | mbverifier )(const unsigned char *mbstr, int len) |
Enumerations | |
| enum | pg_enc { PG_SQL_ASCII = 0, PG_EUC_JP, PG_EUC_CN, PG_EUC_KR, PG_EUC_TW, PG_EUC_JIS_2004, PG_UTF8, PG_MULE_INTERNAL, PG_LATIN1, PG_LATIN2, PG_LATIN3, PG_LATIN4, PG_LATIN5, PG_LATIN6, PG_LATIN7, PG_LATIN8, PG_LATIN9, PG_LATIN10, PG_WIN1256, PG_WIN1258, PG_WIN866, PG_WIN874, PG_KOI8R, PG_WIN1251, PG_WIN1252, PG_ISO_8859_5, PG_ISO_8859_6, PG_ISO_8859_7, PG_ISO_8859_8, PG_WIN1250, PG_WIN1253, PG_WIN1254, PG_WIN1255, PG_WIN1257, PG_KOI8U, PG_SJIS, PG_BIG5, PG_GBK, PG_UHC, PG_GB18030, PG_JOHAB, PG_SHIFT_JIS_2004, _PG_LAST_ENCODING_ } |
Functions | |
| int | pg_char_to_encoding (const char *name) |
| const char * | pg_encoding_to_char (int encoding) |
| int | pg_valid_server_encoding_id (int encoding) |
| pg_encname * | pg_char_to_encname_struct (const char *name) |
| int | pg_mb2wchar (const char *from, pg_wchar *to) |
| int | pg_mb2wchar_with_len (const char *from, pg_wchar *to, int len) |
| int | pg_encoding_mb2wchar_with_len (int encoding, const char *from, pg_wchar *to, int len) |
| int | pg_wchar2mb (const pg_wchar *from, char *to) |
| int | pg_wchar2mb_with_len (const pg_wchar *from, char *to, int len) |
| int | pg_encoding_wchar2mb_with_len (int encoding, const pg_wchar *from, char *to, int len) |
| int | pg_char_and_wchar_strcmp (const char *s1, const pg_wchar *s2) |
| int | pg_wchar_strncmp (const pg_wchar *s1, const pg_wchar *s2, size_t n) |
| int | pg_char_and_wchar_strncmp (const char *s1, const pg_wchar *s2, size_t n) |
| size_t | pg_wchar_strlen (const pg_wchar *wstr) |
| int | pg_mblen (const char *mbstr) |
| int | pg_dsplen (const char *mbstr) |
| int | pg_encoding_mblen (int encoding, const char *mbstr) |
| int | pg_encoding_dsplen (int encoding, const char *mbstr) |
| int | pg_encoding_verifymb (int encoding, const char *mbstr, int len) |
| int | pg_mule_mblen (const unsigned char *mbstr) |
| int | pg_mic_mblen (const unsigned char *mbstr) |
| int | pg_mbstrlen (const char *mbstr) |
| int | pg_mbstrlen_with_len (const char *mbstr, int len) |
| int | pg_mbcliplen (const char *mbstr, int len, int limit) |
| int | pg_encoding_mbcliplen (int encoding, const char *mbstr, int len, int limit) |
| int | pg_mbcharcliplen (const char *mbstr, int len, int imit) |
| int | pg_encoding_max_length (int encoding) |
| int | pg_database_encoding_max_length (void) |
| mbcharacter_incrementer | pg_database_encoding_character_incrementer (void) |
| int | PrepareClientEncoding (int encoding) |
| int | SetClientEncoding (int encoding) |
| void | InitializeClientEncoding (void) |
| int | pg_get_client_encoding (void) |
| const char * | pg_get_client_encoding_name (void) |
| void | SetDatabaseEncoding (int encoding) |
| int | GetDatabaseEncoding (void) |
| const char * | GetDatabaseEncodingName (void) |
| int | GetPlatformEncoding (void) |
| void | pg_bind_textdomain_codeset (const char *domainname) |
| int | pg_valid_client_encoding (const char *name) |
| int | pg_valid_server_encoding (const char *name) |
| unsigned char * | unicode_to_utf8 (pg_wchar c, unsigned char *utf8string) |
| pg_wchar | utf8_to_unicode (const unsigned char *c) |
| int | pg_utf_mblen (const unsigned char *) |
| unsigned char * | pg_do_encoding_conversion (unsigned char *src, int len, int src_encoding, int dest_encoding) |
| char * | pg_client_to_server (const char *s, int len) |
| char * | pg_server_to_client (const char *s, int len) |
| char * | pg_any_to_server (const char *s, int len, int encoding) |
| char * | pg_server_to_any (const char *s, int len, int encoding) |
| unsigned short | BIG5toCNS (unsigned short big5, unsigned char *lc) |
| unsigned short | CNStoBIG5 (unsigned short cns, unsigned char lc) |
| void | LocalToUtf (const unsigned char *iso, unsigned char *utf, const pg_local_to_utf *map, const pg_local_to_utf_combined *cmap, int size1, int size2, int encoding, int len) |
| void | UtfToLocal (const unsigned char *utf, unsigned char *iso, const pg_utf_to_local *map, const pg_utf_to_local_combined *cmap, int size1, int size2, int encoding, int len) |
| bool | pg_verifymbstr (const char *mbstr, int len, bool noError) |
| bool | pg_verify_mbstr (int encoding, const char *mbstr, int len, bool noError) |
| int | pg_verify_mbstr_len (int encoding, const char *mbstr, int len, bool noError) |
| void | check_encoding_conversion_args (int src_encoding, int dest_encoding, int len, int expected_src_encoding, int expected_dest_encoding) |
| void | report_invalid_encoding (int encoding, const char *mbstr, int len) __attribute__((noreturn)) |
| void | report_untranslatable_char (int src_encoding, int dest_encoding, const char *mbstr, int len) __attribute__((noreturn)) |
| void | pg_ascii2mic (const unsigned char *l, unsigned char *p, int len) |
| void | pg_mic2ascii (const unsigned char *mic, unsigned char *p, int len) |
| void | latin2mic (const unsigned char *l, unsigned char *p, int len, int lc, int encoding) |
| void | mic2latin (const unsigned char *mic, unsigned char *p, int len, int lc, int encoding) |
| void | latin2mic_with_table (const unsigned char *l, unsigned char *p, int len, int lc, int encoding, const unsigned char *tab) |
| void | mic2latin_with_table (const unsigned char *mic, unsigned char *p, int len, int lc, int encoding, const unsigned char *tab) |
| bool | pg_utf8_islegal (const unsigned char *source, int length) |
Variables | |
| pg_encname | pg_encname_tbl [] |
| unsigned int | pg_encname_tbl_sz |
| pg_enc2name | pg_enc2name_tbl [] |
| pg_enc2gettext | pg_enc2gettext_tbl [] |
| pg_wchar_tbl | pg_wchar_table [] |
| #define CHECK_ENCODING_CONVERSION_ARGS | ( | srcencoding, | ||
| destencoding | ||||
| ) |
check_encoding_conversion_args(PG_GETARG_INT32(0), \ PG_GETARG_INT32(1), \ PG_GETARG_INT32(4), \ (srcencoding), \ (destencoding))
Definition at line 423 of file pg_wchar.h.
Referenced by ascii_to_mic(), ascii_to_utf8(), big5_to_euc_tw(), big5_to_mic(), big5_to_utf8(), euc_cn_to_mic(), euc_cn_to_utf8(), euc_jis_2004_to_shift_jis_2004(), euc_jis_2004_to_utf8(), euc_jp_to_mic(), euc_jp_to_sjis(), euc_jp_to_utf8(), euc_kr_to_mic(), euc_kr_to_utf8(), euc_tw_to_big5(), euc_tw_to_mic(), euc_tw_to_utf8(), gb18030_to_utf8(), gbk_to_utf8(), iso8859_1_to_utf8(), iso8859_to_utf8(), iso_to_koi8r(), iso_to_mic(), iso_to_win1251(), iso_to_win866(), johab_to_utf8(), koi8r_to_iso(), koi8r_to_mic(), koi8r_to_utf8(), koi8r_to_win1251(), koi8r_to_win866(), koi8u_to_utf8(), latin1_to_mic(), latin2_to_mic(), latin2_to_win1250(), latin3_to_mic(), latin4_to_mic(), mic_to_ascii(), mic_to_big5(), mic_to_euc_cn(), mic_to_euc_jp(), mic_to_euc_kr(), mic_to_euc_tw(), mic_to_iso(), mic_to_koi8r(), mic_to_latin1(), mic_to_latin2(), mic_to_latin3(), mic_to_latin4(), mic_to_sjis(), mic_to_win1250(), mic_to_win1251(), mic_to_win866(), shift_jis_2004_to_euc_jis_2004(), shift_jis_2004_to_utf8(), sjis_to_euc_jp(), sjis_to_mic(), sjis_to_utf8(), uhc_to_utf8(), utf8_to_ascii(), utf8_to_big5(), utf8_to_euc_cn(), utf8_to_euc_jis_2004(), utf8_to_euc_jp(), utf8_to_euc_kr(), utf8_to_euc_tw(), utf8_to_gb18030(), utf8_to_gbk(), utf8_to_iso8859(), utf8_to_iso8859_1(), utf8_to_johab(), utf8_to_koi8r(), utf8_to_koi8u(), utf8_to_shift_jis_2004(), utf8_to_sjis(), utf8_to_uhc(), utf8_to_win(), win1250_to_latin2(), win1250_to_mic(), win1251_to_iso(), win1251_to_koi8r(), win1251_to_mic(), win1251_to_win866(), win866_to_iso(), win866_to_koi8r(), win866_to_mic(), win866_to_win1251(), and win_to_utf8().
Definition at line 123 of file pg_wchar.h.
Referenced by pg_mule2wchar_with_len(), pg_mule_dsplen(), pg_mule_mblen(), and pg_wchar2mule_with_len().
Definition at line 141 of file pg_wchar.h.
Referenced by pg_mule2wchar_with_len(), pg_mule_dsplen(), pg_mule_mblen(), and pg_wchar2mule_with_len().
Definition at line 149 of file pg_wchar.h.
Referenced by pg_mule2wchar_with_len(), pg_mule_dsplen(), and pg_mule_mblen().
Definition at line 150 of file pg_wchar.h.
Referenced by pg_wchar2mule_with_len().
Definition at line 152 of file pg_wchar.h.
Referenced by pg_wchar2mule_with_len().
Definition at line 161 of file pg_wchar.h.
Referenced by pg_mule2wchar_with_len(), pg_mule_dsplen(), and pg_mule_mblen().
Definition at line 162 of file pg_wchar.h.
Referenced by pg_wchar2mule_with_len().
Definition at line 164 of file pg_wchar.h.
Referenced by pg_wchar2mule_with_len().
Definition at line 41 of file pg_wchar.h.
Referenced by pg_sjis_verifier(), and sjis2mic().
Definition at line 42 of file pg_wchar.h.
Referenced by pg_sjis_verifier(), and sjis2mic().
| #define LC_ARABIC_1_COLUMN 0xa5 |
Definition at line 179 of file pg_wchar.h.
| #define LC_ARABIC_2_COLUMN 0xa8 |
Definition at line 185 of file pg_wchar.h.
| #define LC_ARABIC_DIGIT 0xa4 |
Definition at line 178 of file pg_wchar.h.
| #define LC_ASCII_RIGHT_TO_LEFT 0xa6 |
Definition at line 180 of file pg_wchar.h.
| #define LC_BIG5_1 0x98 |
Definition at line 137 of file pg_wchar.h.
| #define LC_BIG5_2 0x99 |
Definition at line 138 of file pg_wchar.h.
| #define LC_CNS11643_1 0x95 |
Definition at line 134 of file pg_wchar.h.
Referenced by BIG5toCNS(), CNStoBIG5(), mic2big5(), and mic2euc_tw().
| #define LC_CNS11643_2 0x96 |
Definition at line 135 of file pg_wchar.h.
Referenced by CNStoBIG5(), mic2big5(), and mic2euc_tw().
| #define LC_CNS11643_3 0xf6 |
Definition at line 201 of file pg_wchar.h.
Referenced by big52mic(), CNStoBIG5(), and mic2euc_tw().
| #define LC_CNS11643_4 0xf7 |
Definition at line 202 of file pg_wchar.h.
Referenced by big52mic(), and CNStoBIG5().
| #define LC_CNS11643_5 0xf8 |
Definition at line 203 of file pg_wchar.h.
| #define LC_CNS11643_6 0xf9 |
Definition at line 204 of file pg_wchar.h.
| #define LC_CNS11643_7 0xfa |
Definition at line 205 of file pg_wchar.h.
Referenced by mic2euc_tw().
| #define LC_ETHIOPIC 0xf5 |
Definition at line 200 of file pg_wchar.h.
| #define LC_GB2312_80 0x91 |
Definition at line 130 of file pg_wchar.h.
Referenced by mic2euc_cn().
| #define LC_INDIAN_1_COLUMN 0xf0 |
Definition at line 190 of file pg_wchar.h.
| #define LC_INDIAN_2_COLUMN 0xfb |
Definition at line 206 of file pg_wchar.h.
| #define LC_IPA 0xa1 |
Definition at line 172 of file pg_wchar.h.
| #define LC_ISO8859_1 0x81 |
Definition at line 102 of file pg_wchar.h.
Referenced by latin12mic(), and mic2latin1().
| #define LC_ISO8859_15 0x8e |
Definition at line 119 of file pg_wchar.h.
| #define LC_ISO8859_2 0x82 |
Definition at line 103 of file pg_wchar.h.
Referenced by latin22mic(), mic2latin2(), mic2win1250(), and win12502mic().
| #define LC_ISO8859_3 0x83 |
Definition at line 104 of file pg_wchar.h.
Referenced by latin32mic(), and mic2latin3().
| #define LC_ISO8859_4 0x84 |
Definition at line 105 of file pg_wchar.h.
Referenced by latin42mic(), and mic2latin4().
| #define LC_ISO8859_5 0x8c |
Definition at line 117 of file pg_wchar.h.
| #define LC_ISO8859_6 0x87 |
Definition at line 108 of file pg_wchar.h.
| #define LC_ISO8859_7 0x86 |
Definition at line 107 of file pg_wchar.h.
| #define LC_ISO8859_8 0x88 |
Definition at line 109 of file pg_wchar.h.
| #define LC_ISO8859_9 0x8d |
Definition at line 118 of file pg_wchar.h.
| #define LC_JISX0201K 0x89 |
Definition at line 110 of file pg_wchar.h.
Referenced by mic2euc_jp(), and mic2sjis().
| #define LC_JISX0201R 0x8a |
Definition at line 111 of file pg_wchar.h.
| #define LC_JISX0208 0x92 |
Definition at line 131 of file pg_wchar.h.
Referenced by mic2euc_jp(), and mic2sjis().
| #define LC_JISX0208_1978 0x90 |
Definition at line 129 of file pg_wchar.h.
| #define LC_JISX0212 0x94 |
Definition at line 133 of file pg_wchar.h.
Referenced by mic2euc_jp(), and mic2sjis().
| #define LC_JISX0213_1 0x97 |
Definition at line 136 of file pg_wchar.h.
| #define LC_KOI8_R 0x8b |
Definition at line 116 of file pg_wchar.h.
Referenced by iso2mic(), koi8r2mic(), mic2iso(), mic2koi8r(), mic2win1251(), mic2win866(), win12512mic(), and win8662mic().
| #define LC_KS5601 0x93 |
Definition at line 132 of file pg_wchar.h.
Referenced by mic2euc_kr().
| #define LC_LAO 0xa7 |
Definition at line 183 of file pg_wchar.h.
| #define LC_SISHENG 0xa0 |
Definition at line 170 of file pg_wchar.h.
| #define LC_TIBETAN 0xfc |
Definition at line 208 of file pg_wchar.h.
| #define LC_TIBETAN_1_COLUMN 0xf1 |
Definition at line 192 of file pg_wchar.h.
| #define LC_TIS620 0x85 |
Definition at line 106 of file pg_wchar.h.
| #define LC_UNICODE_SUBSET 0xf4 |
Definition at line 198 of file pg_wchar.h.
| #define LC_UNICODE_SUBSET_2 0xf2 |
Definition at line 194 of file pg_wchar.h.
| #define LC_UNICODE_SUBSET_3 0xf3 |
Definition at line 196 of file pg_wchar.h.
| #define LC_VISCII_LOWER 0xa2 |
Definition at line 174 of file pg_wchar.h.
| #define LC_VISCII_UPPER 0xa3 |
Definition at line 176 of file pg_wchar.h.
| #define LCPRV1_A 0x9a |
Definition at line 147 of file pg_wchar.h.
| #define LCPRV1_B 0x9b |
Definition at line 148 of file pg_wchar.h.
| #define LCPRV2_A 0x9c |
Definition at line 159 of file pg_wchar.h.
| #define LCPRV2_B 0x9d |
Definition at line 160 of file pg_wchar.h.
Referenced by mic2big5(), and mic2euc_tw().
| #define MAX_MULTIBYTE_CHAR_LEN 4 |
Definition at line 30 of file pg_wchar.h.
Referenced by convertPgWchar(), and fillTrgm().
| #define PG_ENCODING_BE_LAST PG_KOI8U |
Definition at line 286 of file pg_wchar.h.
| #define PG_ENCODING_IS_CLIENT_ONLY | ( | _enc | ) | ((_enc) > PG_ENCODING_BE_LAST && (_enc) < _PG_LAST_ENCODING_) |
Definition at line 295 of file pg_wchar.h.
Referenced by BeginCopy().
| #define PG_VALID_BE_ENCODING | ( | _enc | ) | ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST) |
Definition at line 292 of file pg_wchar.h.
Referenced by createdb(), pg_any_to_server(), pg_valid_server_encoding(), pg_valid_server_encoding_id(), pgss_shmem_startup(), SetDatabaseEncoding(), and setup_collation().
| #define PG_VALID_ENCODING | ( | _enc | ) | ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_) |
Definition at line 298 of file pg_wchar.h.
Referenced by check_encoding_conversion_args(), LocalToUtf(), pg_encoding_dsplen(), pg_encoding_max_length(), pg_encoding_max_length_sql(), pg_encoding_mblen(), pg_encoding_to_char(), pg_encoding_verifymb(), pg_verify_mbstr_len(), and to_ascii_enc().
| #define PG_VALID_FE_ENCODING | ( | _enc | ) | PG_VALID_ENCODING(_enc) |
Definition at line 302 of file pg_wchar.h.
Referenced by pg_valid_client_encoding(), PrepareClientEncoding(), and SetClientEncoding().
| #define SS2 0x8e |
Definition at line 35 of file pg_wchar.h.
Referenced by euc_jis_20042shift_jis_2004(), euc_jp2mic(), euc_jp2sjis(), euc_tw2mic(), pg_euc2wchar_with_len(), pg_euc_dsplen(), pg_euc_mblen(), pg_euccn2wchar_with_len(), pg_eucjp_dsplen(), pg_eucjp_increment(), pg_eucjp_verifier(), pg_euctw2wchar_with_len(), pg_euctw_dsplen(), pg_euctw_mblen(), and pg_euctw_verifier().
| #define SS3 0x8f |
Definition at line 36 of file pg_wchar.h.
Referenced by euc_jis_20042shift_jis_2004(), euc_jp2mic(), euc_jp2sjis(), pg_euc2wchar_with_len(), pg_euc_dsplen(), pg_euc_mblen(), pg_euccn2wchar_with_len(), pg_eucjp_dsplen(), pg_eucjp_increment(), pg_eucjp_verifier(), pg_euctw2wchar_with_len(), pg_euctw_dsplen(), pg_euctw_mblen(), and pg_euctw_verifier().
| typedef int(* mb2wchar_with_len_converter)(const unsigned char *from, pg_wchar *to, int len) |
Definition at line 347 of file pg_wchar.h.
| typedef bool(* mbcharacter_incrementer)(unsigned char *mbstr, int len) |
Definition at line 359 of file pg_wchar.h.
| typedef int(* mbdisplaylen_converter)(const unsigned char *mbstr) |
Definition at line 357 of file pg_wchar.h.
| typedef int(* mblen_converter)(const unsigned char *mbstr) |
Definition at line 355 of file pg_wchar.h.
| typedef int(* mbverifier)(const unsigned char *mbstr, int len) |
Definition at line 361 of file pg_wchar.h.
| typedef struct pg_enc2gettext pg_enc2gettext |
| typedef struct pg_enc2name pg_enc2name |
| typedef struct pg_encname pg_encname |
| typedef unsigned int pg_wchar |
Definition at line 25 of file pg_wchar.h.
| typedef int(* wchar2mb_with_len_converter)(const pg_wchar *from, unsigned char *to, int len) |
Definition at line 351 of file pg_wchar.h.
| enum pg_enc |
Definition at line 235 of file pg_wchar.h.
{
PG_SQL_ASCII = 0, /* SQL/ASCII */
PG_EUC_JP, /* EUC for Japanese */
PG_EUC_CN, /* EUC for Chinese */
PG_EUC_KR, /* EUC for Korean */
PG_EUC_TW, /* EUC for Taiwan */
PG_EUC_JIS_2004, /* EUC-JIS-2004 */
PG_UTF8, /* Unicode UTF8 */
PG_MULE_INTERNAL, /* Mule internal code */
PG_LATIN1, /* ISO-8859-1 Latin 1 */
PG_LATIN2, /* ISO-8859-2 Latin 2 */
PG_LATIN3, /* ISO-8859-3 Latin 3 */
PG_LATIN4, /* ISO-8859-4 Latin 4 */
PG_LATIN5, /* ISO-8859-9 Latin 5 */
PG_LATIN6, /* ISO-8859-10 Latin6 */
PG_LATIN7, /* ISO-8859-13 Latin7 */
PG_LATIN8, /* ISO-8859-14 Latin8 */
PG_LATIN9, /* ISO-8859-15 Latin9 */
PG_LATIN10, /* ISO-8859-16 Latin10 */
PG_WIN1256, /* windows-1256 */
PG_WIN1258, /* Windows-1258 */
PG_WIN866, /* (MS-DOS CP866) */
PG_WIN874, /* windows-874 */
PG_KOI8R, /* KOI8-R */
PG_WIN1251, /* windows-1251 */
PG_WIN1252, /* windows-1252 */
PG_ISO_8859_5, /* ISO-8859-5 */
PG_ISO_8859_6, /* ISO-8859-6 */
PG_ISO_8859_7, /* ISO-8859-7 */
PG_ISO_8859_8, /* ISO-8859-8 */
PG_WIN1250, /* windows-1250 */
PG_WIN1253, /* windows-1253 */
PG_WIN1254, /* windows-1254 */
PG_WIN1255, /* windows-1255 */
PG_WIN1257, /* windows-1257 */
PG_KOI8U, /* KOI8-U */
/* PG_ENCODING_BE_LAST points to the above entry */
/* followings are for client encoding only */
PG_SJIS, /* Shift JIS (Winindows-932) */
PG_BIG5, /* Big5 (Windows-950) */
PG_GBK, /* GBK (Windows-936) */
PG_UHC, /* UHC (Windows-949) */
PG_GB18030, /* GB18030 */
PG_JOHAB, /* EUC for Korean JOHAB */
PG_SHIFT_JIS_2004, /* Shift-JIS-2004 */
_PG_LAST_ENCODING_ /* mark only */
} pg_enc;
| unsigned short BIG5toCNS | ( | unsigned short | big5, | |
| unsigned char * | lc | |||
| ) |
Definition at line 292 of file big5.c.
References b1c4, b2c3, BinarySearchRange(), i, and LC_CNS11643_1.
Referenced by big52mic().
{
unsigned short cns = 0;
int i;
if (big5 < 0xc940U)
{
/* level 1 */
for (i = 0; i < sizeof(b1c4) / (sizeof(unsigned short) * 2); i++)
{
if (b1c4[i][0] == big5)
{
*lc = LC_CNS11643_4;
return (b1c4[i][1] | 0x8080U);
}
}
if (0 < (cns = BinarySearchRange(big5Level1ToCnsPlane1, 23, big5)))
*lc = LC_CNS11643_1;
}
else if (big5 == 0xc94aU)
{
/* level 2 */
*lc = LC_CNS11643_1;
cns = 0x4442;
}
else
{
/* level 2 */
for (i = 0; i < sizeof(b2c3) / (sizeof(unsigned short) * 2); i++)
{
if (b2c3[i][0] == big5)
{
*lc = LC_CNS11643_3;
return (b2c3[i][1] | 0x8080U);
}
}
if (0 < (cns = BinarySearchRange(big5Level2ToCnsPlane2, 46, big5)))
*lc = LC_CNS11643_2;
}
if (0 == cns)
{ /* no mapping Big5 to CNS 11643-1992 */
*lc = 0;
return (unsigned short) '?';
}
return cns | 0x8080;
}
| void check_encoding_conversion_args | ( | int | src_encoding, | |
| int | dest_encoding, | |||
| int | len, | |||
| int | expected_src_encoding, | |||
| int | expected_dest_encoding | |||
| ) |
Definition at line 1969 of file wchar.c.
References elog, ERROR, name, pg_enc2name_tbl, and PG_VALID_ENCODING.
{
if (!PG_VALID_ENCODING(src_encoding))
elog(ERROR, "invalid source encoding ID: %d", src_encoding);
if (src_encoding != expected_src_encoding && expected_src_encoding >= 0)
elog(ERROR, "expected source encoding \"%s\", but got \"%s\"",
pg_enc2name_tbl[expected_src_encoding].name,
pg_enc2name_tbl[src_encoding].name);
if (!PG_VALID_ENCODING(dest_encoding))
elog(ERROR, "invalid destination encoding ID: %d", dest_encoding);
if (dest_encoding != expected_dest_encoding && expected_dest_encoding >= 0)
elog(ERROR, "expected destination encoding \"%s\", but got \"%s\"",
pg_enc2name_tbl[expected_dest_encoding].name,
pg_enc2name_tbl[dest_encoding].name);
if (len < 0)
elog(ERROR, "encoding conversion length must not be negative");
}
| unsigned short CNStoBIG5 | ( | unsigned short | cns, | |
| unsigned char | lc | |||
| ) |
Definition at line 345 of file big5.c.
References b1c4, b2c3, BinarySearchRange(), i, LC_CNS11643_1, LC_CNS11643_2, LC_CNS11643_3, and LC_CNS11643_4.
Referenced by mic2big5().
{
int i;
unsigned int big5 = 0;
cns &= 0x7f7f;
switch (lc)
{
case LC_CNS11643_1:
big5 = BinarySearchRange(cnsPlane1ToBig5Level1, 24, cns);
break;
case LC_CNS11643_2:
big5 = BinarySearchRange(cnsPlane2ToBig5Level2, 47, cns);
break;
case LC_CNS11643_3:
for (i = 0; i < sizeof(b2c3) / (sizeof(unsigned short) * 2); i++)
{
if (b2c3[i][1] == cns)
return (b2c3[i][0]);
}
break;
case LC_CNS11643_4:
for (i = 0; i < sizeof(b1c4) / (sizeof(unsigned short) * 2); i++)
{
if (b1c4[i][1] == cns)
return (b1c4[i][0]);
}
default:
break;
}
return big5;
}
| int GetDatabaseEncoding | ( | void | ) |
Definition at line 925 of file mbutils.c.
References Assert, and pg_enc2name::encoding.
Referenced by ascii(), ASN1_STRING_to_text(), BeginCopy(), chr(), CollationGetCollid(), convert_from_utf8(), convert_to_utf8(), cstr2sv(), db_encoding_strdup(), DefineCollation(), dsnowball_lexize(), Generic_Text_IC_like(), GenericMatchText(), get_collation_oid(), hv_fetch_string(), hv_store_string(), IsThereCollationInNamespace(), locate_stem_module(), p_isspecial(), pg_bind_textdomain_codeset(), pg_database_encoding_character_incrementer(), pg_database_encoding_max_length(), pg_generic_charinc(), pg_set_regex_collation(), pg_stat_statements(), pg_verifymbstr(), pgss_store(), PLyUnicode_Bytes(), PrepareClientEncoding(), read_extension_script_file(), SetClientEncoding(), sv2cstr(), t_readline(), to_ascii_default(), type_maximum_size(), unicode_to_sqlchar(), utf_e2u(), utf_u2e(), varstr_cmp(), write_console(), X509_NAME_to_text(), xml_in(), xml_is_document(), xml_recv(), and xmlparse().
{
Assert(DatabaseEncoding);
return DatabaseEncoding->encoding;
}
| const char* GetDatabaseEncodingName | ( | void | ) |
Definition at line 932 of file mbutils.c.
References Assert, and pg_enc2name::name.
Referenced by check_client_encoding(), CheckMyDatabase(), connect_pg_server(), dblink_connect(), get_collation_oid(), InitializeClientEncoding(), IsThereCollationInNamespace(), and locate_stem_module().
{
Assert(DatabaseEncoding);
return DatabaseEncoding->name;
}
| int GetPlatformEncoding | ( | void | ) |
Definition at line 953 of file mbutils.c.
References pg_enc2name::encoding, encoding, NULL, pg_enc2name_tbl, and pg_get_encoding_from_locale().
Referenced by write_console().
{
if (PlatformEncoding == NULL)
{
/* try to determine encoding of server's environment locale */
int encoding = pg_get_encoding_from_locale("", true);
if (encoding < 0)
encoding = PG_SQL_ASCII;
PlatformEncoding = &pg_enc2name_tbl[encoding];
}
return PlatformEncoding->encoding;
}
| void InitializeClientEncoding | ( | void | ) |
Definition at line 267 of file mbutils.c.
References Assert, backend_startup_complete, ereport, errcode(), errmsg(), FATAL, GetDatabaseEncodingName(), name, pending_client_encoding, pg_enc2name_tbl, PrepareClientEncoding(), and SetClientEncoding().
Referenced by InitPostgres().
{
Assert(!backend_startup_complete);
backend_startup_complete = true;
if (PrepareClientEncoding(pending_client_encoding) < 0 ||
SetClientEncoding(pending_client_encoding) < 0)
{
/*
* Oops, the requested conversion is not available. We couldn't fail
* before, but we can now.
*/
ereport(FATAL,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("conversion between %s and %s is not supported",
pg_enc2name_tbl[pending_client_encoding].name,
GetDatabaseEncodingName())));
}
}
| void latin2mic | ( | const unsigned char * | l, | |
| unsigned char * | p, | |||
| int | len, | |||
| int | lc, | |||
| int | encoding | |||
| ) |
Definition at line 26 of file conv.c.
References IS_HIGHBIT_SET, and report_invalid_encoding().
Referenced by koi8r2mic(), latin12mic(), latin22mic(), latin32mic(), and latin42mic().
{
int c1;
while (len > 0)
{
c1 = *l;
if (c1 == 0)
report_invalid_encoding(encoding, (const char *) l, len);
if (IS_HIGHBIT_SET(c1))
*p++ = lc;
*p++ = c1;
l++;
len--;
}
*p = '\0';
}
| void latin2mic_with_table | ( | const unsigned char * | l, | |
| unsigned char * | p, | |||
| int | len, | |||
| int | lc, | |||
| int | encoding, | |||
| const unsigned char * | tab | |||
| ) |
Definition at line 148 of file conv.c.
References IS_HIGHBIT_SET, PG_MULE_INTERNAL, report_invalid_encoding(), and report_untranslatable_char().
Referenced by iso2mic(), win12502mic(), win12512mic(), and win8662mic().
{
unsigned char c1,
c2;
while (len > 0)
{
c1 = *l;
if (c1 == 0)
report_invalid_encoding(encoding, (const char *) l, len);
if (!IS_HIGHBIT_SET(c1))
*p++ = c1;
else
{
c2 = tab[c1 - HIGHBIT];
if (c2)
{
*p++ = lc;
*p++ = c2;
}
else
report_untranslatable_char(encoding, PG_MULE_INTERNAL,
(const char *) l, len);
}
l++;
len--;
}
*p = '\0';
}
| void LocalToUtf | ( | const unsigned char * | iso, | |
| unsigned char * | utf, | |||
| const pg_local_to_utf * | map, | |||
| const pg_local_to_utf_combined * | cmap, | |||
| int | size1, | |||
| int | size2, | |||
| int | encoding, | |||
| int | len | |||
| ) |
Definition at line 497 of file conv.c.
References compare2(), compare4(), ereport, errcode(), errmsg(), ERROR, IS_HIGHBIT_SET, NULL, pg_encoding_verifymb(), PG_UTF8, PG_VALID_ENCODING, report_invalid_encoding(), report_untranslatable_char(), pg_local_to_utf::utf, pg_local_to_utf_combined::utf1, and pg_local_to_utf_combined::utf2.
Referenced by big5_to_utf8(), euc_cn_to_utf8(), euc_jis_2004_to_utf8(), euc_jp_to_utf8(), euc_kr_to_utf8(), euc_tw_to_utf8(), gb18030_to_utf8(), gbk_to_utf8(), iso8859_to_utf8(), johab_to_utf8(), koi8r_to_utf8(), koi8u_to_utf8(), shift_jis_2004_to_utf8(), sjis_to_utf8(), uhc_to_utf8(), and win_to_utf8().
{
unsigned int iiso;
int l;
pg_local_to_utf *p;
pg_local_to_utf_combined *cp;
if (!PG_VALID_ENCODING(encoding))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid encoding number: %d", encoding)));
for (; len > 0; len -= l)
{
/* "break" cases all represent errors */
if (*iso == '\0')
break;
if (!IS_HIGHBIT_SET(*iso))
{
/* ASCII case is easy */
*utf++ = *iso++;
l = 1;
continue;
}
l = pg_encoding_verifymb(encoding, (const char *) iso, len);
if (l < 0)
break;
if (l == 1)
iiso = *iso++;
else if (l == 2)
{
iiso = *iso++ << 8;
iiso |= *iso++;
}
else if (l == 3)
{
iiso = *iso++ << 16;
iiso |= *iso++ << 8;
iiso |= *iso++;
}
else if (l == 4)
{
iiso = *iso++ << 24;
iiso |= *iso++ << 16;
iiso |= *iso++ << 8;
iiso |= *iso++;
}
p = bsearch(&iiso, map, size1,
sizeof(pg_local_to_utf), compare2);
if (p == NULL)
{
/*
* not found in the ordinary map. if there's a combined character
* map, try with it
*/
if (cmap)
{
cp = bsearch(&iiso, cmap, size2,
sizeof(pg_local_to_utf_combined), compare4);
if (cp)
{
if (cp->utf1 & 0xff000000)
*utf++ = cp->utf1 >> 24;
if (cp->utf1 & 0x00ff0000)
*utf++ = (cp->utf1 & 0x00ff0000) >> 16;
if (cp->utf1 & 0x0000ff00)
*utf++ = (cp->utf1 & 0x0000ff00) >> 8;
if (cp->utf1 & 0x000000ff)
*utf++ = cp->utf1 & 0x000000ff;
if (cp->utf2 & 0xff000000)
*utf++ = cp->utf2 >> 24;
if (cp->utf2 & 0x00ff0000)
*utf++ = (cp->utf2 & 0x00ff0000) >> 16;
if (cp->utf2 & 0x0000ff00)
*utf++ = (cp->utf2 & 0x0000ff00) >> 8;
if (cp->utf2 & 0x000000ff)
*utf++ = cp->utf2 & 0x000000ff;
continue;
}
}
report_untranslatable_char(encoding, PG_UTF8,
(const char *) (iso - l), len);
}
else
{
if (p->utf & 0xff000000)
*utf++ = p->utf >> 24;
if (p->utf & 0x00ff0000)
*utf++ = (p->utf & 0x00ff0000) >> 16;
if (p->utf & 0x0000ff00)
*utf++ = (p->utf & 0x0000ff00) >> 8;
if (p->utf & 0x000000ff)
*utf++ = p->utf & 0x000000ff;
}
}
if (len > 0)
report_invalid_encoding(encoding, (const char *) iso, len);
*utf = '\0';
}
| void mic2latin | ( | const unsigned char * | mic, | |
| unsigned char * | p, | |||
| int | len, | |||
| int | lc, | |||
| int | encoding | |||
| ) |
Definition at line 54 of file conv.c.
References IS_HIGHBIT_SET, pg_mic_mblen(), PG_MULE_INTERNAL, report_invalid_encoding(), and report_untranslatable_char().
Referenced by mic2koi8r(), mic2latin1(), mic2latin2(), mic2latin3(), and mic2latin4().
{
int c1;
while (len > 0)
{
c1 = *mic;
if (c1 == 0)
report_invalid_encoding(PG_MULE_INTERNAL, (const char *) mic, len);
if (!IS_HIGHBIT_SET(c1))
{
/* easy for ASCII */
*p++ = c1;
mic++;
len--;
}
else
{
int l = pg_mic_mblen(mic);
if (len < l)
report_invalid_encoding(PG_MULE_INTERNAL, (const char *) mic,
len);
if (l != 2 || c1 != lc || !IS_HIGHBIT_SET(mic[1]))
report_untranslatable_char(PG_MULE_INTERNAL, encoding,
(const char *) mic, len);
*p++ = mic[1];
mic += 2;
len -= 2;
}
}
*p = '\0';
}
| void mic2latin_with_table | ( | const unsigned char * | mic, | |
| unsigned char * | p, | |||
| int | len, | |||
| int | lc, | |||
| int | encoding, | |||
| const unsigned char * | tab | |||
| ) |
Definition at line 196 of file conv.c.
References HIGHBIT, IS_HIGHBIT_SET, pg_mic_mblen(), PG_MULE_INTERNAL, report_invalid_encoding(), and report_untranslatable_char().
Referenced by mic2iso(), mic2win1250(), mic2win1251(), and mic2win866().
{
unsigned char c1,
c2;
while (len > 0)
{
c1 = *mic;
if (c1 == 0)
report_invalid_encoding(PG_MULE_INTERNAL, (const char *) mic, len);
if (!IS_HIGHBIT_SET(c1))
{
/* easy for ASCII */
*p++ = c1;
mic++;
len--;
}
else
{
int l = pg_mic_mblen(mic);
if (len < l)
report_invalid_encoding(PG_MULE_INTERNAL, (const char *) mic,
len);
if (l != 2 || c1 != lc || !IS_HIGHBIT_SET(mic[1]) ||
(c2 = tab[mic[1] - HIGHBIT]) == 0)
{
report_untranslatable_char(PG_MULE_INTERNAL, encoding,
(const char *) mic, len);
break; /* keep compiler quiet */
}
*p++ = c2;
mic += 2;
len -= 2;
}
}
*p = '\0';
}
| char* pg_any_to_server | ( | const char * | s, | |
| int | len, | |||
| int | encoding | |||
| ) |
Definition at line 549 of file mbutils.c.
References Assert, pg_enc2name::encoding, ereport, errcode(), errmsg(), ERROR, i, IS_HIGHBIT_SET, name, perform_default_encoding_conversion(), pg_do_encoding_conversion(), pg_enc2name_tbl, PG_SQL_ASCII, PG_VALID_BE_ENCODING, and pg_verify_mbstr().
Referenced by CopyReadLine(), json_lex_string(), and pg_client_to_server().
{
Assert(DatabaseEncoding);
Assert(ClientEncoding);
if (len <= 0)
return (char *) s;
if (encoding == DatabaseEncoding->encoding ||
encoding == PG_SQL_ASCII)
{
/*
* No conversion is needed, but we must still validate the data.
*/
(void) pg_verify_mbstr(DatabaseEncoding->encoding, s, len, false);
return (char *) s;
}
if (DatabaseEncoding->encoding == PG_SQL_ASCII)
{
/*
* No conversion is possible, but we must still validate the data,
* because the client-side code might have done string escaping using
* the selected client_encoding. If the client encoding is ASCII-safe
* then we just do a straight validation under that encoding. For an
* ASCII-unsafe encoding we have a problem: we dare not pass such data
* to the parser but we have no way to convert it. We compromise by
* rejecting the data if it contains any non-ASCII characters.
*/
if (PG_VALID_BE_ENCODING(encoding))
(void) pg_verify_mbstr(encoding, s, len, false);
else
{
int i;
for (i = 0; i < len; i++)
{
if (s[i] == '\0' || IS_HIGHBIT_SET(s[i]))
ereport(ERROR,
(errcode(ERRCODE_CHARACTER_NOT_IN_REPERTOIRE),
errmsg("invalid byte value for encoding \"%s\": 0x%02x",
pg_enc2name_tbl[PG_SQL_ASCII].name,
(unsigned char) s[i])));
}
}
return (char *) s;
}
if (ClientEncoding->encoding == encoding)
return perform_default_encoding_conversion(s, len, true);
else
return (char *) pg_do_encoding_conversion(
(unsigned char *) s, len, encoding, DatabaseEncoding->encoding);
}
| void pg_ascii2mic | ( | const unsigned char * | l, | |
| unsigned char * | p, | |||
| int | len | |||
| ) |
Definition at line 98 of file conv.c.
References IS_HIGHBIT_SET, PG_SQL_ASCII, and report_invalid_encoding().
Referenced by ascii_to_mic(), and ascii_to_utf8().
{
int c1;
while (len > 0)
{
c1 = *l;
if (c1 == 0 || IS_HIGHBIT_SET(c1))
report_invalid_encoding(PG_SQL_ASCII, (const char *) l, len);
*p++ = c1;
l++;
len--;
}
*p = '\0';
}
| void pg_bind_textdomain_codeset | ( | const char * | domainname | ) |
Definition at line 888 of file mbutils.c.
References elog, encoding, GetDatabaseEncoding(), i, LOG, name, pg_enc2gettext::name, NULL, pg_enc2gettext_tbl, and pg_strcasecmp().
Referenced by CheckMyDatabase(), and pg_bindtextdomain().
{
#if defined(ENABLE_NLS)
int encoding = GetDatabaseEncoding();
int i;
/*
* gettext() uses the codeset specified by LC_CTYPE by default, so if that
* matches the database encoding we don't need to do anything. In CREATE
* DATABASE, we enforce or trust that the locale's codeset matches
* database encoding, except for the C locale. In C locale, we bind
* gettext() explicitly to the right codeset.
*
* On Windows, though, gettext() tends to get confused so we always bind
* it.
*/
#ifndef WIN32
const char *ctype = setlocale(LC_CTYPE, NULL);
if (pg_strcasecmp(ctype, "C") != 0 && pg_strcasecmp(ctype, "POSIX") != 0)
return;
#endif
for (i = 0; pg_enc2gettext_tbl[i].name != NULL; i++)
{
if (pg_enc2gettext_tbl[i].encoding == encoding)
{
if (bind_textdomain_codeset(domainname,
pg_enc2gettext_tbl[i].name) == NULL)
elog(LOG, "bind_textdomain_codeset failed");
break;
}
}
#endif
}
| int pg_char_and_wchar_strcmp | ( | const char * | s1, | |
| const pg_wchar * | s2 | |||
| ) |
| int pg_char_and_wchar_strncmp | ( | const char * | s1, | |
| const pg_wchar * | s2, | |||
| size_t | n | |||
| ) |
| pg_encname* pg_char_to_encname_struct | ( | const char * | name | ) |
Definition at line 463 of file encnames.c.
References clean_encoding_name(), ereport, errcode(), errmsg(), ERROR, NAMEDATALEN, NULL, and pg_encname_tbl_sz.
Referenced by pg_char_to_encoding().
{
unsigned int nel = pg_encname_tbl_sz;
pg_encname *base = pg_encname_tbl,
*last = base + nel - 1,
*position;
int result;
char buff[NAMEDATALEN],
*key;
if (name == NULL || *name == '\0')
return NULL;
if (strlen(name) >= NAMEDATALEN)
{
#ifdef FRONTEND
fprintf(stderr, "encoding name too long\n");
return NULL;
#else
ereport(ERROR,
(errcode(ERRCODE_NAME_TOO_LONG),
errmsg("encoding name too long")));
#endif
}
key = clean_encoding_name(name, buff);
while (last >= base)
{
position = base + ((last - base) >> 1);
result = key[0] - position->name[0];
if (result == 0)
{
result = strcmp(key, position->name);
if (result == 0)
return position;
}
if (result < 0)
last = position - 1;
else
base = position + 1;
}
return NULL;
}
| int pg_char_to_encoding | ( | const char * | name | ) |
Definition at line 512 of file encnames.c.
{
pg_encname *p;
if (!name)
return -1;
p = pg_char_to_encname_struct(name);
return p ? p->encoding : -1;
}
| char* pg_client_to_server | ( | const char * | s, | |
| int | len | |||
| ) |
Definition at line 538 of file mbutils.c.
References Assert, pg_enc2name::encoding, and pg_any_to_server().
Referenced by exec_bind_message(), parse_fcall_arguments(), pq_getmsgstring(), and pq_getmsgtext().
{
Assert(ClientEncoding);
return pg_any_to_server(s, len, ClientEncoding->encoding);
}
| mbcharacter_incrementer pg_database_encoding_character_incrementer | ( | void | ) |
Definition at line 1845 of file wchar.c.
References GetDatabaseEncoding(), PG_EUC_JP, and PG_UTF8.
Referenced by make_greater_string().
{
/*
* Eventually it might be best to add a field to pg_wchar_table[], but for
* now we just use a switch.
*/
switch (GetDatabaseEncoding())
{
case PG_UTF8:
return pg_utf8_increment;
case PG_EUC_JP:
return pg_eucjp_increment;
default:
return pg_generic_charinc;
}
}
| int pg_database_encoding_max_length | ( | void | ) |
Definition at line 1836 of file wchar.c.
References GetDatabaseEncoding(), and pg_wchar_tbl::maxmblen.
Referenced by appendStringInfoRegexpSubstr(), BeginCopy(), bpcharlen(), charlen_to_bytelen(), check_replace_text_has_escape_char(), dotrim(), gbt_bpchar_compress(), gbt_bpchar_consistent(), gbt_text_compress(), gbt_text_consistent(), Generic_Text_IC_like(), GenericMatchText(), infix(), init_tsvector_parser(), like_escape(), like_fixed_prefix(), lowerstr_with_len(), lpad(), pg_mbcharcliplen(), pg_mbstrlen(), pg_mbstrlen_with_len(), regexp_fixed_prefix(), rpad(), show_trgm(), str_initcap(), str_tolower(), str_toupper(), text_length(), text_position_setup(), text_reverse(), text_substring(), TParserInit(), translate(), tsvectorout(), and unaccent_lexize().
{
return pg_wchar_table[GetDatabaseEncoding()].maxmblen;
}
| unsigned char* pg_do_encoding_conversion | ( | unsigned char * | src, | |
| int | len, | |||
| int | src_encoding, | |||
| int | dest_encoding | |||
| ) |
Definition at line 328 of file mbutils.c.
References CStringGetDatum, elog, ereport, errcode(), errdetail(), errmsg(), ERROR, FindDefaultConversionProc(), Int32GetDatum, IsTransactionState(), LOG, MAX_CONVERSION_GROWTH, MaxAllocSize, ObjectIdGetDatum, OidFunctionCall5, OidIsValid, palloc(), pg_encoding_to_char(), PG_SQL_ASCII, PROCOID, and SearchSysCacheExists1.
Referenced by ASN1_STRING_to_text(), convert_charset(), db_encoding_strdup(), dsnowball_lexize(), hv_fetch_string(), hv_store_string(), pg_any_to_server(), pg_convert(), pg_server_to_any(), pg_stat_statements(), PLyUnicode_Bytes(), read_extension_script_file(), t_readline(), unicode_to_sqlchar(), utf_e2u(), utf_u2e(), X509_NAME_to_text(), and xml_recv().
{
unsigned char *result;
Oid proc;
if (!IsTransactionState())
return src;
if (src_encoding == dest_encoding)
return src;
if (src_encoding == PG_SQL_ASCII || dest_encoding == PG_SQL_ASCII)
return src;
if (len <= 0)
return src;
proc = FindDefaultConversionProc(src_encoding, dest_encoding);
if (!OidIsValid(proc))
{
ereport(LOG,
(errcode(ERRCODE_UNDEFINED_FUNCTION),
errmsg("default conversion function for encoding \"%s\" to \"%s\" does not exist",
pg_encoding_to_char(src_encoding),
pg_encoding_to_char(dest_encoding))));
return src;
}
/*
* XXX we should avoid throwing errors in OidFunctionCall. Otherwise we
* are going into infinite loop! So we have to make sure that the
* function exists before calling OidFunctionCall.
*/
if (!SearchSysCacheExists1(PROCOID, ObjectIdGetDatum(proc)))
{
elog(LOG, "cache lookup failed for function %u", proc);
return src;
}
/*
* Allocate space for conversion result, being wary of integer overflow
*/
if ((Size) len >= (MaxAllocSize / (Size) MAX_CONVERSION_GROWTH))
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("out of memory"),
errdetail("String of %d bytes is too long for encoding conversion.",
len)));
result = palloc(len * MAX_CONVERSION_GROWTH + 1);
OidFunctionCall5(proc,
Int32GetDatum(src_encoding),
Int32GetDatum(dest_encoding),
CStringGetDatum(src),
CStringGetDatum(result),
Int32GetDatum(len));
return result;
}
| int pg_dsplen | ( | const char * | mbstr | ) |
Definition at line 744 of file mbutils.c.
References pg_wchar_tbl::dsplen, pg_enc2name::encoding, and pg_wchar_table.
Referenced by p_isspecial().
{
return ((*pg_wchar_table[DatabaseEncoding->encoding].dsplen) ((const unsigned char *) mbstr));
}
| int pg_encoding_dsplen | ( | int | encoding, | |
| const char * | mbstr | |||
| ) |
Definition at line 1793 of file wchar.c.
References Assert, PG_SQL_ASCII, and PG_VALID_ENCODING.
Referenced by PQdsplen(), and reportErrorPosition().
{
Assert(PG_VALID_ENCODING(encoding));
return ((encoding >= 0 &&
encoding < sizeof(pg_wchar_table) / sizeof(pg_wchar_tbl)) ?
((*pg_wchar_table[encoding].dsplen) ((const unsigned char *) mbstr)) :
((*pg_wchar_table[PG_SQL_ASCII].dsplen) ((const unsigned char *) mbstr)));
}
| int pg_encoding_max_length | ( | int | encoding | ) |
Definition at line 1823 of file wchar.c.
References Assert, pg_wchar_tbl::maxmblen, and PG_VALID_ENCODING.
Referenced by ascii(), chr(), pg_encoding_mbcliplen(), pg_verify_mbstr_len(), reportErrorPosition(), and type_maximum_size().
{
Assert(PG_VALID_ENCODING(encoding));
return pg_wchar_table[encoding].maxmblen;
}
| int pg_encoding_mb2wchar_with_len | ( | int | encoding, | |
| const char * | from, | |||
| pg_wchar * | to, | |||
| int | len | |||
| ) |
Definition at line 707 of file mbutils.c.
References pg_wchar_table.
{
return (*pg_wchar_table[encoding].mb2wchar_with_len) ((const unsigned char *) from, to, len);
}
| int pg_encoding_mbcliplen | ( | int | encoding, | |
| const char * | mbstr, | |||
| int | len, | |||
| int | limit | |||
| ) |
Definition at line 807 of file mbutils.c.
References cliplen(), pg_wchar_tbl::mblen, pg_encoding_max_length(), and pg_wchar_table.
Referenced by generate_normalized_query(), pg_mbcliplen(), pgss_shmem_startup(), and pgss_store().
{
mblen_converter mblen_fn;
int clen = 0;
int l;
/* optimization for single byte encoding */
if (pg_encoding_max_length(encoding) == 1)
return cliplen(mbstr, len, limit);
mblen_fn = pg_wchar_table[encoding].mblen;
while (len > 0 && *mbstr)
{
l = (*mblen_fn) ((const unsigned char *) mbstr);
if ((clen + l) > limit)
break;
clen += l;
if (clen == limit)
break;
len -= l;
mbstr += l;
}
return clen;
}
| int pg_encoding_mblen | ( | int | encoding, | |
| const char * | mbstr | |||
| ) |
Definition at line 1779 of file wchar.c.
References Assert, PG_SQL_ASCII, and PG_VALID_ENCODING.
Referenced by CopyAttributeOutCSV(), CopyAttributeOutText(), CopyReadLineText(), PQescapeInternal(), PQescapeStringInternal(), PQmblen(), report_invalid_encoding(), report_untranslatable_char(), reportErrorPosition(), and unicode_to_sqlchar().
{
Assert(PG_VALID_ENCODING(encoding));
return ((encoding >= 0 &&
encoding < sizeof(pg_wchar_table) / sizeof(pg_wchar_tbl)) ?
((*pg_wchar_table[encoding].mblen) ((const unsigned char *) mbstr)) :
((*pg_wchar_table[PG_SQL_ASCII].mblen) ((const unsigned char *) mbstr)));
}
| const char* pg_encoding_to_char | ( | int | encoding | ) |
Definition at line 534 of file encnames.c.
{
if (PG_VALID_ENCODING(encoding))
{
pg_enc2name *p = &pg_enc2name_tbl[encoding];
Assert(encoding == p->encoding);
return p->name;
}
return "";
}
| int pg_encoding_verifymb | ( | int | encoding, | |
| const char * | mbstr, | |||
| int | len | |||
| ) |
Definition at line 1809 of file wchar.c.
References Assert, PG_SQL_ASCII, and PG_VALID_ENCODING.
Referenced by big52mic(), euc_jis_20042shift_jis_2004(), euc_jp2mic(), euc_jp2sjis(), euc_kr2mic(), euc_tw2mic(), LocalToUtf(), mic2big5(), mic2euc_jp(), mic2euc_kr(), mic2euc_tw(), mic2sjis(), shift_jis_20042euc_jis_2004(), and sjis2euc_jp().
{
Assert(PG_VALID_ENCODING(encoding));
return ((encoding >= 0 &&
encoding < sizeof(pg_wchar_table) / sizeof(pg_wchar_tbl)) ?
((*pg_wchar_table[encoding].mbverify) ((const unsigned char *) mbstr, len)) :
((*pg_wchar_table[PG_SQL_ASCII].mbverify) ((const unsigned char *) mbstr, len)));
}
| int pg_encoding_wchar2mb_with_len | ( | int | encoding, | |
| const pg_wchar * | from, | |||
| char * | to, | |||
| int | len | |||
| ) |
Definition at line 729 of file mbutils.c.
References pg_wchar_table.
{
return (*pg_wchar_table[encoding].wchar2mb_with_len) (from, (unsigned char *)to, len);
}
| int pg_get_client_encoding | ( | void | ) |
Definition at line 291 of file mbutils.c.
References Assert, and pg_enc2name::encoding.
Referenced by BeginCopy(), and xml_send().
{
Assert(ClientEncoding);
return ClientEncoding->encoding;
}
| const char* pg_get_client_encoding_name | ( | void | ) |
Definition at line 301 of file mbutils.c.
References Assert, and pg_enc2name::name.
{
Assert(ClientEncoding);
return ClientEncoding->name;
}
| int pg_mb2wchar | ( | const char * | from, | |
| pg_wchar * | to | |||
| ) |
Definition at line 693 of file mbutils.c.
References pg_enc2name::encoding, pg_wchar_tbl::mb2wchar_with_len, and pg_wchar_table.
{
return (*pg_wchar_table[DatabaseEncoding->encoding].mb2wchar_with_len) ((const unsigned char *) from, to, strlen(from));
}
| int pg_mb2wchar_with_len | ( | const char * | from, | |
| pg_wchar * | to, | |||
| int | len | |||
| ) |
Definition at line 700 of file mbutils.c.
References pg_enc2name::encoding, pg_wchar_tbl::mb2wchar_with_len, and pg_wchar_table.
Referenced by check_ident_usermap(), CheckAffix(), NIAddAffix(), parse_ident_line(), RE_compile(), RE_compile_and_cache(), RE_execute(), replace_text_regexp(), setup_regexp_matches(), text_position_setup(), and TParserInit().
{
return (*pg_wchar_table[DatabaseEncoding->encoding].mb2wchar_with_len) ((const unsigned char *) from, to, len);
}
| int pg_mbcharcliplen | ( | const char * | mbstr, | |
| int | len, | |||
| int | imit | |||
| ) |
Definition at line 839 of file mbutils.c.
References cliplen(), pg_database_encoding_max_length(), and pg_mblen().
Referenced by bpchar(), bpchar_input(), text_left(), text_right(), varchar(), and varchar_input().
{
int clen = 0;
int nch = 0;
int l;
/* optimization for single byte encoding */
if (pg_database_encoding_max_length() == 1)
return cliplen(mbstr, len, limit);
while (len > 0 && *mbstr)
{
l = pg_mblen(mbstr);
nch++;
if (nch > limit)
break;
clen += l;
len -= l;
mbstr += l;
}
return clen;
}
| int pg_mbcliplen | ( | const char * | mbstr, | |
| int | len, | |||
| int | limit | |||
| ) |
Definition at line 797 of file mbutils.c.
References pg_enc2name::encoding, and pg_encoding_mbcliplen().
Referenced by bpchar_name(), ChooseIndexColumnNames(), ExecBuildSlotValueDescription(), limit_printout_length(), make_greater_string(), makeObjectName(), namein(), pgstat_report_activity(), pgstat_report_appname(), text_name(), text_to_cstring_buffer(), and truncate_identifier().
{
return pg_encoding_mbcliplen(DatabaseEncoding->encoding, mbstr,
len, limit);
}
| int pg_mblen | ( | const char * | mbstr | ) |
Definition at line 737 of file mbutils.c.
References pg_enc2name::encoding, pg_wchar_tbl::mblen, and pg_wchar_table.
Referenced by addFlagValue(), appendStringInfoRegexpSubstr(), charlen_to_bytelen(), check_replace_text_has_escape_char(), dotrim(), extract_mb_char(), find_word(), findchar(), findwrd(), gbt_var_node_cp_len(), get_modifiers(), get_wildcard_part(), getlexeme(), gettoken_query(), gettoken_tsvector(), infix(), initSuffixTree(), json_lex_string(), levenshtein_internal(), lpad(), lquery_in(), ltree_in(), make_trigrams(), map_sql_identifier_to_xml_name(), map_xml_name_to_sql_identifier(), match_prosrc_to_literal(), NIImportAffixes(), NIImportDictionary(), NIImportOOAffixes(), parse_affentry(), pg_mbcharcliplen(), pg_mbstrlen(), pg_mbstrlen_with_len(), readstoplist(), report_json_context(), rpad(), RS_compile(), RS_execute(), RS_isRegis(), text_reverse(), text_substring(), text_to_array_internal(), thesaurusRead(), TParserGet(), translate(), ts_stat_sql(), tsvectorout(), unaccent_lexize(), and wchareq().
{
return ((*pg_wchar_table[DatabaseEncoding->encoding].mblen) ((const unsigned char *) mbstr));
}
| int pg_mbstrlen | ( | const char * | mbstr | ) |
Definition at line 751 of file mbutils.c.
References pg_database_encoding_max_length(), and pg_mblen().
Referenced by text_format_append_string().
{
int len = 0;
/* optimization for single byte encoding */
if (pg_database_encoding_max_length() == 1)
return strlen(mbstr);
while (*mbstr)
{
mbstr += pg_mblen(mbstr);
len++;
}
return len;
}
| int pg_mbstrlen_with_len | ( | const char * | mbstr, | |
| int | len | |||
| ) |
Definition at line 771 of file mbutils.c.
References pg_database_encoding_max_length(), and pg_mblen().
Referenced by bpchar(), bpchar_input(), bpcharlen(), levenshtein_internal(), lpad(), match_prosrc_to_query(), parser_errposition(), plpgsql_scanner_errposition(), rpad(), text_left(), text_length(), text_right(), and text_substring().
{
int len = 0;
/* optimization for single byte encoding */
if (pg_database_encoding_max_length() == 1)
return limit;
while (limit > 0 && *mbstr)
{
int l = pg_mblen(mbstr);
limit -= l;
mbstr += l;
len++;
}
return len;
}
| void pg_mic2ascii | ( | const unsigned char * | mic, | |
| unsigned char * | p, | |||
| int | len | |||
| ) |
Definition at line 118 of file conv.c.
References IS_HIGHBIT_SET, PG_MULE_INTERNAL, PG_SQL_ASCII, and report_untranslatable_char().
Referenced by mic_to_ascii(), and utf8_to_ascii().
{
int c1;
while (len > 0)
{
c1 = *mic;
if (c1 == 0 || IS_HIGHBIT_SET(c1))
report_untranslatable_char(PG_MULE_INTERNAL, PG_SQL_ASCII,
(const char *) mic, len);
*p++ = c1;
mic++;
len--;
}
*p = '\0';
}
| int pg_mic_mblen | ( | const unsigned char * | mbstr | ) |
Definition at line 1770 of file wchar.c.
References pg_mule_mblen().
Referenced by mic2latin(), and mic2latin_with_table().
{
return pg_mule_mblen(mbstr);
}
| int pg_mule_mblen | ( | const unsigned char * | mbstr | ) |
Definition at line 866 of file wchar.c.
References IS_LC1, IS_LC2, IS_LCPRV1, and IS_LCPRV2.
Referenced by pg_mic_mblen(), and pg_mule_verifier().
| char* pg_server_to_any | ( | const char * | s, | |
| int | len, | |||
| int | encoding | |||
| ) |
Definition at line 619 of file mbutils.c.
References Assert, pg_enc2name::encoding, perform_default_encoding_conversion(), pg_do_encoding_conversion(), and PG_SQL_ASCII.
Referenced by CopyAttributeOutCSV(), CopyAttributeOutText(), CopyTo(), and pg_server_to_client().
{
Assert(DatabaseEncoding);
Assert(ClientEncoding);
if (len <= 0)
return (char *) s;
if (encoding == DatabaseEncoding->encoding ||
encoding == PG_SQL_ASCII ||
DatabaseEncoding->encoding == PG_SQL_ASCII)
return (char *) s; /* assume data is valid */
if (ClientEncoding->encoding == encoding)
return perform_default_encoding_conversion(s, len, false);
else
return (char *) pg_do_encoding_conversion(
(unsigned char *) s, len, DatabaseEncoding->encoding, encoding);
}
| char* pg_server_to_client | ( | const char * | s, | |
| int | len | |||
| ) |
Definition at line 608 of file mbutils.c.
References Assert, pg_enc2name::encoding, and pg_server_to_any().
Referenced by pq_puttextmessage(), pq_sendcountedtext(), pq_sendstring(), and pq_sendtext().
{
Assert(ClientEncoding);
return pg_server_to_any(s, len, ClientEncoding->encoding);
}
| bool pg_utf8_islegal | ( | const unsigned char * | source, | |
| int | length | |||
| ) |
Definition at line 1452 of file wchar.c.
Referenced by pg_utf8_verifier(), utf8_to_iso8859_1(), and UtfToLocal().
{
unsigned char a;
switch (length)
{
default:
/* reject lengths 5 and 6 for now */
return false;
case 4:
a = source[3];
if (a < 0x80 || a > 0xBF)
return false;
/* FALL THRU */
case 3:
a = source[2];
if (a < 0x80 || a > 0xBF)
return false;
/* FALL THRU */
case 2:
a = source[1];
switch (*source)
{
case 0xE0:
if (a < 0xA0 || a > 0xBF)
return false;
break;
case 0xED:
if (a < 0x80 || a > 0x9F)
return false;
break;
case 0xF0:
if (a < 0x90 || a > 0xBF)
return false;
break;
case 0xF4:
if (a < 0x80 || a > 0x8F)
return false;
break;
default:
if (a < 0x80 || a > 0xBF)
return false;
break;
}
/* FALL THRU */
case 1:
a = *source;
if (a >= 0x80 && a < 0xC2)
return false;
if (a > 0xF4)
return false;
break;
}
return true;
}
| int pg_utf_mblen | ( | const unsigned char * | ) |
Definition at line 541 of file wchar.c.
Referenced by json_lex_string(), pg_utf8_verifier(), pg_wchar2utf_with_len(), utf8_to_iso8859_1(), and UtfToLocal().
{
int len;
if ((*s & 0x80) == 0)
len = 1;
else if ((*s & 0xe0) == 0xc0)
len = 2;
else if ((*s & 0xf0) == 0xe0)
len = 3;
else if ((*s & 0xf8) == 0xf0)
len = 4;
#ifdef NOT_USED
else if ((*s & 0xfc) == 0xf8)
len = 5;
else if ((*s & 0xfe) == 0xfc)
len = 6;
#endif
else
len = 1;
return len;
}
| int pg_valid_client_encoding | ( | const char * | name | ) |
Definition at line 401 of file encnames.c.
References enc, pg_char_to_encoding(), and PG_VALID_FE_ENCODING.
Referenced by check_client_encoding().
{
int enc;
if ((enc = pg_char_to_encoding(name)) < 0)
return -1;
if (!PG_VALID_FE_ENCODING(enc))
return -1;
return enc;
}
| int pg_valid_server_encoding | ( | const char * | name | ) |
Definition at line 415 of file encnames.c.
References enc, pg_char_to_encoding(), and PG_VALID_BE_ENCODING.
Referenced by createdb(), get_encoding_id(), and parse_extension_control_file().
{
int enc;
if ((enc = pg_char_to_encoding(name)) < 0)
return -1;
if (!PG_VALID_BE_ENCODING(enc))
return -1;
return enc;
}
| int pg_valid_server_encoding_id | ( | int | encoding | ) |
Definition at line 429 of file encnames.c.
{
return PG_VALID_BE_ENCODING(encoding);
}
Definition at line 1880 of file wchar.c.
References pg_verify_mbstr_len().
Referenced by pg_any_to_server(), and t_readline().
{
return pg_verify_mbstr_len(encoding, mbstr, len, noError) >= 0;
}
| int pg_verify_mbstr_len | ( | int | encoding, | |
| const char * | mbstr, | |||
| int | len, | |||
| bool | noError | |||
| ) |
Definition at line 1897 of file wchar.c.
References Assert, IS_HIGHBIT_SET, pg_wchar_tbl::mbverify, NULL, pg_encoding_max_length(), PG_VALID_ENCODING, and report_invalid_encoding().
Referenced by length_in_encoding(), pg_convert(), pg_verify_mbstr(), pg_verifymbstr(), read_extension_script_file(), and utf_u2e().
{
mbverifier mbverify;
int mb_len;
Assert(PG_VALID_ENCODING(encoding));
/*
* In single-byte encodings, we need only reject nulls (\0).
*/
if (pg_encoding_max_length(encoding) <= 1)
{
const char *nullpos = memchr(mbstr, 0, len);
if (nullpos == NULL)
return len;
if (noError)
return -1;
report_invalid_encoding(encoding, nullpos, 1);
}
/* fetch function pointer just once */
mbverify = pg_wchar_table[encoding].mbverify;
mb_len = 0;
while (len > 0)
{
int l;
/* fast path for ASCII-subset characters */
if (!IS_HIGHBIT_SET(*mbstr))
{
if (*mbstr != '\0')
{
mb_len++;
mbstr++;
len--;
continue;
}
if (noError)
return -1;
report_invalid_encoding(encoding, mbstr, len);
}
l = (*mbverify) ((const unsigned char *) mbstr, len);
if (l < 0)
{
if (noError)
return -1;
report_invalid_encoding(encoding, mbstr, len);
}
mbstr += l;
len -= l;
mb_len++;
}
return mb_len;
}
Definition at line 1869 of file wchar.c.
References GetDatabaseEncoding(), and pg_verify_mbstr_len().
Referenced by CopyReadAttributesText(), plperl_spi_exec(), plperl_spi_prepare(), plperl_spi_query(), PLy_cursor_query(), PLy_output(), PLy_spi_execute_query(), PLy_spi_prepare(), PLyObject_ToDatum(), read_text_file(), and spg_text_leaf_consistent().
{
return
pg_verify_mbstr_len(GetDatabaseEncoding(), mbstr, len, noError) >= 0;
}
| int pg_wchar2mb | ( | const pg_wchar * | from, | |
| char * | to | |||
| ) |
Definition at line 715 of file mbutils.c.
References pg_enc2name::encoding, pg_wchar_strlen(), pg_wchar_table, and pg_wchar_tbl::wchar2mb_with_len.
{
return (*pg_wchar_table[DatabaseEncoding->encoding].wchar2mb_with_len) (from, (unsigned char *)to, pg_wchar_strlen(from));
}
| int pg_wchar2mb_with_len | ( | const pg_wchar * | from, | |
| char * | to, | |||
| int | len | |||
| ) |
Definition at line 722 of file mbutils.c.
References pg_enc2name::encoding, pg_wchar_table, and pg_wchar_tbl::wchar2mb_with_len.
Referenced by convertPgWchar(), and regexp_fixed_prefix().
{
return (*pg_wchar_table[DatabaseEncoding->encoding].wchar2mb_with_len) (from, (unsigned char *)to, len);
}
| size_t pg_wchar_strlen | ( | const pg_wchar * | wstr | ) |
Definition at line 70 of file wstrncmp.c.
Referenced by pg_wchar2mb().
{
const pg_wchar *s;
for (s = str; *s; ++s)
;
return (s - str);
}
| int PrepareClientEncoding | ( | int | encoding | ) |
Definition at line 88 of file mbutils.c.
References backend_startup_complete, ConvProcInfo::c_encoding, FindDefaultConversionProc(), fmgr_info_cxt(), GetDatabaseEncoding(), IsTransactionState(), lcons(), lfirst, MemoryContextAlloc(), MemoryContextSwitchTo(), OidIsValid, PG_SQL_ASCII, PG_VALID_FE_ENCODING, ConvProcInfo::s_encoding, ConvProcInfo::to_client_info, ConvProcInfo::to_server_info, and TopMemoryContext.
Referenced by check_client_encoding(), and InitializeClientEncoding().
{
int current_server_encoding;
ListCell *lc;
if (!PG_VALID_FE_ENCODING(encoding))
return -1;
/* Can't do anything during startup, per notes above */
if (!backend_startup_complete)
return 0;
current_server_encoding = GetDatabaseEncoding();
/*
* Check for cases that require no conversion function.
*/
if (current_server_encoding == encoding ||
current_server_encoding == PG_SQL_ASCII ||
encoding == PG_SQL_ASCII)
return 0;
if (IsTransactionState())
{
/*
* If we're in a live transaction, it's safe to access the catalogs,
* so look up the functions. We repeat the lookup even if the info is
* already cached, so that we can react to changes in the contents of
* pg_conversion.
*/
Oid to_server_proc,
to_client_proc;
ConvProcInfo *convinfo;
MemoryContext oldcontext;
to_server_proc = FindDefaultConversionProc(encoding,
current_server_encoding);
if (!OidIsValid(to_server_proc))
return -1;
to_client_proc = FindDefaultConversionProc(current_server_encoding,
encoding);
if (!OidIsValid(to_client_proc))
return -1;
/*
* Load the fmgr info into TopMemoryContext (could still fail here)
*/
convinfo = (ConvProcInfo *) MemoryContextAlloc(TopMemoryContext,
sizeof(ConvProcInfo));
convinfo->s_encoding = current_server_encoding;
convinfo->c_encoding = encoding;
fmgr_info_cxt(to_server_proc, &convinfo->to_server_info,
TopMemoryContext);
fmgr_info_cxt(to_client_proc, &convinfo->to_client_info,
TopMemoryContext);
/* Attach new info to head of list */
oldcontext = MemoryContextSwitchTo(TopMemoryContext);
ConvProcList = lcons(convinfo, ConvProcList);
MemoryContextSwitchTo(oldcontext);
/*
* We cannot yet remove any older entry for the same encoding pair,
* since it could still be in use. SetClientEncoding will clean up.
*/
return 0; /* success */
}
else
{
/*
* If we're not in a live transaction, the only thing we can do is
* restore a previous setting using the cache. This covers all
* transaction-rollback cases. The only case it might not work for is
* trying to change client_encoding on the fly by editing
* postgresql.conf and SIGHUP'ing. Which would probably be a stupid
* thing to do anyway.
*/
foreach(lc, ConvProcList)
{
ConvProcInfo *oldinfo = (ConvProcInfo *) lfirst(lc);
if (oldinfo->s_encoding == current_server_encoding &&
oldinfo->c_encoding == encoding)
return 0;
}
return -1; /* it's not cached, so fail */
}
}
| void report_invalid_encoding | ( | int | encoding, | |
| const char * | mbstr, | |||
| int | len | |||
| ) |
Definition at line 1998 of file wchar.c.
References buf, ereport, errcode(), errmsg(), ERROR, Min, name, pg_enc2name_tbl, and pg_encoding_mblen().
Referenced by big52mic(), euc_cn2mic(), euc_jis_20042shift_jis_2004(), euc_jp2mic(), euc_jp2sjis(), euc_kr2mic(), euc_tw2mic(), iso8859_1_to_utf8(), latin2mic(), latin2mic_with_table(), LocalToUtf(), mic2big5(), mic2euc_cn(), mic2euc_jp(), mic2euc_kr(), mic2euc_tw(), mic2latin(), mic2latin_with_table(), mic2sjis(), pg_ascii2mic(), pg_verify_mbstr_len(), shift_jis_20042euc_jis_2004(), sjis2euc_jp(), sjis2mic(), utf8_to_iso8859_1(), and UtfToLocal().
{
int l = pg_encoding_mblen(encoding, mbstr);
char buf[8 * 5 + 1];
char *p = buf;
int j,
jlimit;
jlimit = Min(l, len);
jlimit = Min(jlimit, 8); /* prevent buffer overrun */
for (j = 0; j < jlimit; j++)
{
p += sprintf(p, "0x%02x", (unsigned char) mbstr[j]);
if (j < jlimit - 1)
p += sprintf(p, " ");
}
ereport(ERROR,
(errcode(ERRCODE_CHARACTER_NOT_IN_REPERTOIRE),
errmsg("invalid byte sequence for encoding \"%s\": %s",
pg_enc2name_tbl[encoding].name,
buf)));
}
| void report_untranslatable_char | ( | int | src_encoding, | |
| int | dest_encoding, | |||
| const char * | mbstr, | |||
| int | len | |||
| ) |
Definition at line 2030 of file wchar.c.
References buf, ereport, errcode(), errmsg(), ERROR, Min, name, pg_enc2name_tbl, and pg_encoding_mblen().
Referenced by big52mic(), latin2mic_with_table(), LocalToUtf(), mic2big5(), mic2euc_cn(), mic2euc_jp(), mic2euc_kr(), mic2euc_tw(), mic2latin(), mic2latin_with_table(), mic2sjis(), pg_mic2ascii(), utf8_to_iso8859_1(), and UtfToLocal().
{
int l = pg_encoding_mblen(src_encoding, mbstr);
char buf[8 * 5 + 1];
char *p = buf;
int j,
jlimit;
jlimit = Min(l, len);
jlimit = Min(jlimit, 8); /* prevent buffer overrun */
for (j = 0; j < jlimit; j++)
{
p += sprintf(p, "0x%02x", (unsigned char) mbstr[j]);
if (j < jlimit - 1)
p += sprintf(p, " ");
}
ereport(ERROR,
(errcode(ERRCODE_UNTRANSLATABLE_CHARACTER),
errmsg("character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"",
buf,
pg_enc2name_tbl[src_encoding].name,
pg_enc2name_tbl[dest_encoding].name)));
}
| int SetClientEncoding | ( | int | encoding | ) |
Definition at line 186 of file mbutils.c.
References backend_startup_complete, ConvProcInfo::c_encoding, GetDatabaseEncoding(), lfirst, list_delete_cell(), list_head(), lnext, pending_client_encoding, pfree(), pg_enc2name_tbl, PG_SQL_ASCII, PG_VALID_FE_ENCODING, ConvProcInfo::s_encoding, ConvProcInfo::to_client_info, and ConvProcInfo::to_server_info.
Referenced by assign_client_encoding(), and InitializeClientEncoding().
{
int current_server_encoding;
bool found;
ListCell *lc;
ListCell *prev;
ListCell *next;
if (!PG_VALID_FE_ENCODING(encoding))
return -1;
/* Can't do anything during startup, per notes above */
if (!backend_startup_complete)
{
pending_client_encoding = encoding;
return 0;
}
current_server_encoding = GetDatabaseEncoding();
/*
* Check for cases that require no conversion function.
*/
if (current_server_encoding == encoding ||
current_server_encoding == PG_SQL_ASCII ||
encoding == PG_SQL_ASCII)
{
ClientEncoding = &pg_enc2name_tbl[encoding];
ToServerConvProc = NULL;
ToClientConvProc = NULL;
return 0;
}
/*
* Search the cache for the entry previously prepared by
* PrepareClientEncoding; if there isn't one, we lose. While at it,
* release any duplicate entries so that repeated Prepare/Set cycles don't
* leak memory.
*/
found = false;
prev = NULL;
for (lc = list_head(ConvProcList); lc; lc = next)
{
ConvProcInfo *convinfo = (ConvProcInfo *) lfirst(lc);
next = lnext(lc);
if (convinfo->s_encoding == current_server_encoding &&
convinfo->c_encoding == encoding)
{
if (!found)
{
/* Found newest entry, so set up */
ClientEncoding = &pg_enc2name_tbl[encoding];
ToServerConvProc = &convinfo->to_server_info;
ToClientConvProc = &convinfo->to_client_info;
found = true;
}
else
{
/* Duplicate entry, release it */
ConvProcList = list_delete_cell(ConvProcList, lc, prev);
pfree(convinfo);
continue; /* prev mustn't advance */
}
}
prev = lc;
}
if (found)
return 0; /* success */
else
return -1; /* it's not cached, so fail */
}
| void SetDatabaseEncoding | ( | int | encoding | ) |
Definition at line 875 of file mbutils.c.
References Assert, elog, pg_enc2name::encoding, ERROR, pg_enc2name_tbl, and PG_VALID_BE_ENCODING.
Referenced by CheckMyDatabase().
{
if (!PG_VALID_BE_ENCODING(encoding))
elog(ERROR, "invalid database encoding: %d", encoding);
DatabaseEncoding = &pg_enc2name_tbl[encoding];
Assert(DatabaseEncoding->encoding == encoding);
}
| unsigned char* unicode_to_utf8 | ( | pg_wchar | c, | |
| unsigned char * | utf8string | |||
| ) |
Definition at line 475 of file wchar.c.
Referenced by json_lex_string(), pg_wchar2utf_with_len(), and unicode_to_sqlchar().
{
if (c <= 0x7F)
{
utf8string[0] = c;
}
else if (c <= 0x7FF)
{
utf8string[0] = 0xC0 | ((c >> 6) & 0x1F);
utf8string[1] = 0x80 | (c & 0x3F);
}
else if (c <= 0xFFFF)
{
utf8string[0] = 0xE0 | ((c >> 12) & 0x0F);
utf8string[1] = 0x80 | ((c >> 6) & 0x3F);
utf8string[2] = 0x80 | (c & 0x3F);
}
else
{
utf8string[0] = 0xF0 | ((c >> 18) & 0x07);
utf8string[1] = 0x80 | ((c >> 12) & 0x3F);
utf8string[2] = 0x80 | ((c >> 6) & 0x3F);
utf8string[3] = 0x80 | (c & 0x3F);
}
return utf8string;
}
| pg_wchar utf8_to_unicode | ( | const unsigned char * | c | ) |
Definition at line 714 of file wchar.c.
Referenced by pg_utf_dsplen(), and pg_wcsformat().
{
if ((*c & 0x80) == 0)
return (pg_wchar) c[0];
else if ((*c & 0xe0) == 0xc0)
return (pg_wchar) (((c[0] & 0x1f) << 6) |
(c[1] & 0x3f));
else if ((*c & 0xf0) == 0xe0)
return (pg_wchar) (((c[0] & 0x0f) << 12) |
((c[1] & 0x3f) << 6) |
(c[2] & 0x3f));
else if ((*c & 0xf8) == 0xf0)
return (pg_wchar) (((c[0] & 0x07) << 18) |
((c[1] & 0x3f) << 12) |
((c[2] & 0x3f) << 6) |
(c[3] & 0x3f));
else
/* that is an invalid code on purpose */
return 0xffffffff;
}
| void UtfToLocal | ( | const unsigned char * | utf, | |
| unsigned char * | iso, | |||
| const pg_utf_to_local * | map, | |||
| const pg_utf_to_local_combined * | cmap, | |||
| int | size1, | |||
| int | size2, | |||
| int | encoding, | |||
| int | len | |||
| ) |
Definition at line 336 of file conv.c.
References pg_utf_to_local_combined::code, pg_utf_to_local::code, compare1(), compare3(), NULL, PG_UTF8, pg_utf8_islegal(), pg_utf_mblen(), report_invalid_encoding(), report_untranslatable_char(), and set_iso_code().
Referenced by utf8_to_big5(), utf8_to_euc_cn(), utf8_to_euc_jis_2004(), utf8_to_euc_jp(), utf8_to_euc_kr(), utf8_to_euc_tw(), utf8_to_gb18030(), utf8_to_gbk(), utf8_to_iso8859(), utf8_to_johab(), utf8_to_koi8r(), utf8_to_koi8u(), utf8_to_shift_jis_2004(), utf8_to_sjis(), utf8_to_uhc(), and utf8_to_win().
{
uint32 iutf;
uint32 cutf[2];
uint32 code;
pg_utf_to_local *p;
pg_utf_to_local_combined *cp;
int l;
for (; len > 0; len -= l)
{
/* "break" cases all represent errors */
if (*utf == '\0')
break;
l = pg_utf_mblen(utf);
if (len < l)
break;
if (!pg_utf8_islegal(utf, l))
break;
if (l == 1)
{
/* ASCII case is easy */
*iso++ = *utf++;
continue;
}
else if (l == 2)
{
iutf = *utf++ << 8;
iutf |= *utf++;
}
else if (l == 3)
{
iutf = *utf++ << 16;
iutf |= *utf++ << 8;
iutf |= *utf++;
}
else if (l == 4)
{
iutf = *utf++ << 24;
iutf |= *utf++ << 16;
iutf |= *utf++ << 8;
iutf |= *utf++;
}
/*
* first, try with combined map if possible
*/
if (cmap && len > l)
{
const unsigned char *utf_save = utf;
int len_save = len;
int l_save = l;
len -= l;
l = pg_utf_mblen(utf);
if (len < l)
break;
if (!pg_utf8_islegal(utf, l))
break;
cutf[0] = iutf;
if (l == 1)
{
if (len_save > 1)
{
p = bsearch(&cutf[0], map, size1,
sizeof(pg_utf_to_local), compare1);
if (p == NULL)
report_untranslatable_char(PG_UTF8, encoding,
(const char *) (utf_save - l_save), len_save);
iso = set_iso_code(iso, p->code);
}
/* ASCII case is easy */
*iso++ = *utf++;
continue;
}
else if (l == 2)
{
iutf = *utf++ << 8;
iutf |= *utf++;
}
else if (l == 3)
{
iutf = *utf++ << 16;
iutf |= *utf++ << 8;
iutf |= *utf++;
}
else if (l == 4)
{
iutf = *utf++ << 24;
iutf |= *utf++ << 16;
iutf |= *utf++ << 8;
iutf |= *utf++;
}
cutf[1] = iutf;
cp = bsearch(cutf, cmap, size2,
sizeof(pg_utf_to_local_combined), compare3);
if (cp)
code = cp->code;
else
{
/* not found in combined map. try with ordinary map */
p = bsearch(&cutf[0], map, size1,
sizeof(pg_utf_to_local), compare1);
if (p == NULL)
report_untranslatable_char(PG_UTF8, encoding,
(const char *) (utf_save - l_save), len_save);
iso = set_iso_code(iso, p->code);
p = bsearch(&cutf[1], map, size1,
sizeof(pg_utf_to_local), compare1);
if (p == NULL)
report_untranslatable_char(PG_UTF8, encoding,
(const char *) (utf - l), len);
code = p->code;
}
}
else /* no cmap or no remaining data */
{
p = bsearch(&iutf, map, size1,
sizeof(pg_utf_to_local), compare1);
if (p == NULL)
report_untranslatable_char(PG_UTF8, encoding,
(const char *) (utf - l), len);
code = p->code;
}
iso = set_iso_code(iso, code);
}
if (len > 0)
report_invalid_encoding(PG_UTF8, (const char *) utf, len);
*iso = '\0';
}
Definition at line 357 of file encnames.c.
Referenced by pg_bind_textdomain_codeset().
Definition at line 307 of file encnames.c.
Referenced by check_encoding_conversion_args(), GetPlatformEncoding(), InitializeClientEncoding(), pg_any_to_server(), report_invalid_encoding(), report_untranslatable_char(), SetClientEncoding(), and SetDatabaseEncoding().
Definition at line 32 of file encnames.c.
| unsigned int pg_encname_tbl_sz |
Definition at line 294 of file encnames.c.
Referenced by pg_char_to_encname_struct().
Definition at line 1723 of file wchar.c.
Referenced by pg_dsplen(), pg_encoding_max_length_sql(), pg_encoding_mb2wchar_with_len(), pg_encoding_mbcliplen(), pg_encoding_wchar2mb_with_len(), pg_generic_charinc(), pg_mb2wchar(), pg_mb2wchar_with_len(), pg_mblen(), pg_wchar2mb(), and pg_wchar2mb_with_len().
1.7.1