{
char *enc;
- enc = (char *)
- pg_do_encoding_conversion((unsigned char *) qstr,
- entry->query_len,
- entry->encoding,
- GetDatabaseEncoding());
+ enc = pg_any_to_server(qstr,
+ entry->query_len,
+ entry->encoding);
values[i++] = CStringGetTextDatum(enc);
nullterm = '\0';
BIO_write(membuf, &nullterm, 1);
size = BIO_get_mem_data(membuf, &sp);
- dp = (char *) pg_do_encoding_conversion((unsigned char *) sp,
- size - 1,
- PG_UTF8,
- GetDatabaseEncoding());
+ dp = pg_any_to_server(sp, size - 1, PG_UTF8);
result = cstring_to_text(dp);
if (dp != sp)
pfree(dp);
nullterm = '\0';
BIO_write(membuf, &nullterm, 1);
size = BIO_get_mem_data(membuf, &sp);
- dp = (char *) pg_do_encoding_conversion((unsigned char *) sp,
- size - 1,
- PG_UTF8,
- GetDatabaseEncoding());
+ dp = pg_any_to_server(sp, size - 1, PG_UTF8);
result = cstring_to_text(dp);
if (dp != sp)
pfree(dp);
const char *filename)
{
int src_encoding;
- int dest_encoding = GetDatabaseEncoding();
bytea *content;
char *src_str;
char *dest_str;
/* use database encoding if not given */
if (control->encoding < 0)
- src_encoding = dest_encoding;
+ src_encoding = GetDatabaseEncoding();
else
src_encoding = control->encoding;
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)
{
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);
{
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);
(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)
{
/*
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);
{
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);
}
}
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)
{
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));
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;
}
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);
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()
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);
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);
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;
}
{
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();
{
/* 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);
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);
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