aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/extension.c8
-rw-r--r--src/backend/snowball/dict_snowball.c10
-rw-r--r--src/backend/tsearch/ts_locale.c5
-rw-r--r--src/backend/utils/adt/pg_locale.c23
-rw-r--r--src/backend/utils/adt/xml.c27
-rw-r--r--src/backend/utils/mb/mbutils.c4
-rw-r--r--src/pl/plperl/plperl.c8
-rw-r--r--src/pl/plperl/plperl_helpers.h25
-rw-r--r--src/pl/plpython/plpy_util.c15
-rw-r--r--src/pl/tcl/pltcl.c8
10 files changed, 46 insertions, 87 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index ce5aed301b1..06bd90b9aa9 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -635,7 +635,6 @@ read_extension_script_file(const ExtensionControlFile *control,
const char *filename)
{
int src_encoding;
- int dest_encoding = GetDatabaseEncoding();
bytea *content;
char *src_str;
char *dest_str;
@@ -645,7 +644,7 @@ read_extension_script_file(const ExtensionControlFile *control,
/* use database encoding if not given */
if (control->encoding < 0)
- src_encoding = dest_encoding;
+ src_encoding = GetDatabaseEncoding();
else
src_encoding = control->encoding;
@@ -655,10 +654,7 @@ read_extension_script_file(const ExtensionControlFile *control,
pg_verify_mbstr_len(src_encoding, src_str, len, false);
/* convert the encoding to the database encoding */
- dest_str = (char *) pg_do_encoding_conversion((unsigned char *) src_str,
- len,
- src_encoding,
- dest_encoding);
+ dest_str = pg_any_to_server(src_str, len, src_encoding);
/* if no conversion happened, we have to arrange for null termination */
if (dest_str == src_str)
diff --git a/src/backend/snowball/dict_snowball.c b/src/backend/snowball/dict_snowball.c
index a585c7206b2..37d2966359f 100644
--- a/src/backend/snowball/dict_snowball.c
+++ b/src/backend/snowball/dict_snowball.c
@@ -255,10 +255,7 @@ dsnowball_lexize(PG_FUNCTION_ARGS)
{
char *recoded;
- recoded = (char *) pg_do_encoding_conversion((unsigned char *) txt,
- strlen(txt),
- GetDatabaseEncoding(),
- PG_UTF8);
+ recoded = pg_server_to_any(txt, strlen(txt), PG_UTF8);
if (recoded != txt)
{
pfree(txt);
@@ -284,10 +281,7 @@ dsnowball_lexize(PG_FUNCTION_ARGS)
{
char *recoded;
- recoded = (char *) pg_do_encoding_conversion((unsigned char *) txt,
- strlen(txt),
- PG_UTF8,
- GetDatabaseEncoding());
+ recoded = pg_any_to_server(txt, strlen(txt), PG_UTF8);
if (recoded != txt)
{
pfree(txt);
diff --git a/src/backend/tsearch/ts_locale.c b/src/backend/tsearch/ts_locale.c
index d73687af9e0..f9490c835dd 100644
--- a/src/backend/tsearch/ts_locale.c
+++ b/src/backend/tsearch/ts_locale.c
@@ -209,10 +209,7 @@ t_readline(FILE *fp)
(void) pg_verify_mbstr(PG_UTF8, buf, len, false);
/* And convert */
- recoded = (char *) pg_do_encoding_conversion((unsigned char *) buf,
- len,
- PG_UTF8,
- GetDatabaseEncoding());
+ recoded = pg_any_to_server(buf, len, PG_UTF8);
if (recoded == buf)
{
/*
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index 0bf350adeab..f34446329f5 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -418,9 +418,7 @@ db_encoding_strdup(int encoding, const char *str)
char *mstr;
/* convert the string to the database encoding */
- pstr = (char *) pg_do_encoding_conversion(
- (unsigned char *) str, strlen(str),
- encoding, GetDatabaseEncoding());
+ pstr = pg_any_to_server(str, strlen(str), encoding);
mstr = strdup(pstr);
if (pstr != str)
pfree(pstr);
@@ -581,35 +579,32 @@ strftime_win32(char *dst, size_t dstlen, const wchar_t *format, const struct tm
{
size_t len;
wchar_t wbuf[MAX_L10N_DATA];
- int encoding;
-
- encoding = GetDatabaseEncoding();
len = wcsftime(wbuf, MAX_L10N_DATA, format, tm);
if (len == 0)
-
+ {
/*
* strftime call failed - return 0 with the contents of dst
* unspecified
*/
return 0;
+ }
len = WideCharToMultiByte(CP_UTF8, 0, wbuf, len, dst, dstlen, NULL, NULL);
if (len == 0)
- elog(ERROR,
- "could not convert string to UTF-8: error code %lu", GetLastError());
+ elog(ERROR, "could not convert string to UTF-8: error code %lu",
+ GetLastError());
dst[len] = '\0';
- if (encoding != PG_UTF8)
+ if (GetDatabaseEncoding() != PG_UTF8)
{
- char *convstr =
- (char *) pg_do_encoding_conversion((unsigned char *) dst,
- len, PG_UTF8, encoding);
+ char *convstr = pg_any_to_server(dst, len, PG_UTF8);
- if (dst != convstr)
+ if (convstr != dst)
{
strlcpy(dst, convstr, dstlen);
len = strlen(dst);
+ pfree(convstr);
}
}
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index d36751855b6..765469c623e 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -345,10 +345,7 @@ xml_recv(PG_FUNCTION_ARGS)
xmlFreeDoc(doc);
/* Now that we know what we're dealing with, convert to server encoding */
- newstr = (char *) pg_do_encoding_conversion((unsigned char *) str,
- nbytes,
- encoding,
- GetDatabaseEncoding());
+ newstr = pg_any_to_server(str, nbytes, encoding);
if (newstr != str)
{
@@ -1793,10 +1790,8 @@ sqlchar_to_unicode(char *s)
char *utf8string;
pg_wchar ret[2]; /* need space for trailing zero */
- utf8string = (char *) pg_do_encoding_conversion((unsigned char *) s,
- pg_mblen(s),
- GetDatabaseEncoding(),
- PG_UTF8);
+ /* note we're not assuming s is null-terminated */
+ utf8string = pg_server_to_any(s, pg_mblen(s), PG_UTF8);
pg_encoding_mb2wchar_with_len(PG_UTF8, utf8string, ret,
pg_encoding_mblen(PG_UTF8, utf8string));
@@ -1892,19 +1887,15 @@ map_sql_identifier_to_xml_name(char *ident, bool fully_escaped,
static char *
unicode_to_sqlchar(pg_wchar c)
{
- unsigned char utf8string[5]; /* need room for trailing zero */
+ char utf8string[8]; /* need room for trailing zero */
char *result;
memset(utf8string, 0, sizeof(utf8string));
- unicode_to_utf8(c, utf8string);
-
- result = (char *) pg_do_encoding_conversion(utf8string,
- pg_encoding_mblen(PG_UTF8,
- (char *) utf8string),
- PG_UTF8,
- GetDatabaseEncoding());
- /* if pg_do_encoding_conversion didn't strdup, we must */
- if (result == (char *) utf8string)
+ unicode_to_utf8(c, (unsigned char *) utf8string);
+
+ result = pg_any_to_server(utf8string, strlen(utf8string), PG_UTF8);
+ /* if pg_any_to_server didn't strdup, we must */
+ if (result == utf8string)
result = pstrdup(result);
return result;
}
diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c
index 7f43cae69e2..15cf0d806b3 100644
--- a/src/backend/utils/mb/mbutils.c
+++ b/src/backend/utils/mb/mbutils.c
@@ -1077,7 +1077,9 @@ pgwin32_message_to_UTF16(const char *str, int len, int *utf16len)
char *utf8;
utf8 = (char *) pg_do_encoding_conversion((unsigned char *) str,
- len, GetMessageEncoding(), PG_UTF8);
+ len,
+ GetMessageEncoding(),
+ PG_UTF8);
if (utf8 != str)
len = strlen(utf8);
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index ed6884e863a..f8ccaa59e89 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -3811,9 +3811,7 @@ hv_store_string(HV *hv, const char *key, SV *val)
char *hkey;
SV **ret;
- hkey = (char *)
- pg_do_encoding_conversion((unsigned char *) key, strlen(key),
- GetDatabaseEncoding(), PG_UTF8);
+ hkey = pg_server_to_any(key, strlen(key), PG_UTF8);
/*
* This seems nowhere documented, but under Perl 5.8.0 and up, hv_store()
@@ -3841,9 +3839,7 @@ hv_fetch_string(HV *hv, const char *key)
char *hkey;
SV **ret;
- hkey = (char *)
- pg_do_encoding_conversion((unsigned char *) key, strlen(key),
- GetDatabaseEncoding(), PG_UTF8);
+ hkey = pg_server_to_any(key, strlen(key), PG_UTF8);
/* See notes in hv_store_string */
hlen = -(int) strlen(hkey);
diff --git a/src/pl/plperl/plperl_helpers.h b/src/pl/plperl/plperl_helpers.h
index 3e8aa7c4a26..c1c7c297cc5 100644
--- a/src/pl/plperl/plperl_helpers.h
+++ b/src/pl/plperl/plperl_helpers.h
@@ -9,24 +9,11 @@
static inline char *
utf_u2e(char *utf8_str, size_t len)
{
- int enc = GetDatabaseEncoding();
char *ret;
- /*
- * When we are in a PG_UTF8 or SQL_ASCII database
- * pg_do_encoding_conversion() will not do any conversion (which is good)
- * or verification (not so much), so we need to run the verification step
- * separately.
- */
- if (enc == PG_UTF8 || enc == PG_SQL_ASCII)
- {
- pg_verify_mbstr_len(enc, utf8_str, len, false);
- ret = utf8_str;
- }
- else
- ret = (char *) pg_do_encoding_conversion((unsigned char *) utf8_str,
- len, PG_UTF8, enc);
+ ret = pg_any_to_server(utf8_str, len, PG_UTF8);
+ /* ensure we have a copy even if no conversion happened */
if (ret == utf8_str)
ret = pstrdup(ret);
@@ -41,12 +28,14 @@ utf_u2e(char *utf8_str, size_t len)
static inline char *
utf_e2u(const char *str)
{
- char *ret =
- (char *) pg_do_encoding_conversion((unsigned char *) str, strlen(str),
- GetDatabaseEncoding(), PG_UTF8);
+ char *ret;
+ ret = pg_server_to_any(str, strlen(str), PG_UTF8);
+
+ /* ensure we have a copy even if no conversion happened */
if (ret == str)
ret = pstrdup(ret);
+
return ret;
}
diff --git a/src/pl/plpython/plpy_util.c b/src/pl/plpython/plpy_util.c
index 95cbba5cdc5..88670e66d0a 100644
--- a/src/pl/plpython/plpy_util.c
+++ b/src/pl/plpython/plpy_util.c
@@ -90,11 +90,9 @@ PLyUnicode_Bytes(PyObject *unicode)
{
PG_TRY();
{
- encoded = (char *) pg_do_encoding_conversion(
- (unsigned char *) utf8string,
- strlen(utf8string),
- PG_UTF8,
- GetDatabaseEncoding());
+ encoded = pg_any_to_server(utf8string,
+ strlen(utf8string),
+ PG_UTF8);
}
PG_CATCH();
{
@@ -109,7 +107,7 @@ PLyUnicode_Bytes(PyObject *unicode)
/* finally, build a bytes object in the server encoding */
rv = PyBytes_FromStringAndSize(encoded, strlen(encoded));
- /* if pg_do_encoding_conversion allocated memory, free it now */
+ /* if pg_any_to_server allocated memory, free it now */
if (utf8string != encoded)
pfree(encoded);
@@ -149,10 +147,7 @@ PLyUnicode_FromString(const char *s)
char *utf8string;
PyObject *o;
- utf8string = (char *) pg_do_encoding_conversion((unsigned char *) s,
- strlen(s),
- GetDatabaseEncoding(),
- PG_UTF8);
+ utf8string = pg_server_to_any(s, strlen(s), PG_UTF8);
o = PyUnicode_FromString(utf8string);
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 05380389821..b3bf65ec885 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -63,13 +63,17 @@
static unsigned char *
utf_u2e(unsigned char *src)
{
- return pg_do_encoding_conversion(src, strlen(src), PG_UTF8, GetDatabaseEncoding());
+ return (unsigned char *) pg_any_to_server((char *) src,
+ strlen(src),
+ PG_UTF8);
}
static unsigned char *
utf_e2u(unsigned char *src)
{
- return pg_do_encoding_conversion(src, strlen(src), GetDatabaseEncoding(), PG_UTF8);
+ return (unsigned char *) pg_server_to_any((char *) src,
+ strlen(src),
+ PG_UTF8);
}
#define PLTCL_UTF