#include "postgres.h"
#include "fmgr.h"
#include "mb/pg_wchar.h"
Go to the source code of this file.
Functions | |
PG_FUNCTION_INFO_V1 (iso8859_1_to_utf8) | |
PG_FUNCTION_INFO_V1 (utf8_to_iso8859_1) | |
Datum | iso8859_1_to_utf8 (PG_FUNCTION_ARGS) |
Datum | utf8_to_iso8859_1 (PG_FUNCTION_ARGS) |
Variables | |
PG_MODULE_MAGIC |
Datum iso8859_1_to_utf8 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 38 of file utf8_and_iso8859_1.c.
References CHECK_ENCODING_CONVERSION_ARGS, HIGHBIT, IS_HIGHBIT_SET, PG_GETARG_CSTRING, PG_GETARG_INT32, PG_LATIN1, PG_RETURN_VOID, PG_UTF8, and report_invalid_encoding().
{ unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); int len = PG_GETARG_INT32(4); unsigned short c; CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN1, PG_UTF8); while (len > 0) { c = *src; if (c == 0) report_invalid_encoding(PG_LATIN1, (const char *) src, len); if (!IS_HIGHBIT_SET(c)) *dest++ = c; else { *dest++ = (c >> 6) | 0xc0; *dest++ = (c & 0x003f) | HIGHBIT; } src++; len--; } *dest = '\0'; PG_RETURN_VOID(); }
PG_FUNCTION_INFO_V1 | ( | utf8_to_iso8859_1 | ) |
PG_FUNCTION_INFO_V1 | ( | iso8859_1_to_utf8 | ) |
Datum utf8_to_iso8859_1 | ( | PG_FUNCTION_ARGS | ) |
Definition at line 68 of file utf8_and_iso8859_1.c.
References CHECK_ENCODING_CONVERSION_ARGS, IS_HIGHBIT_SET, PG_GETARG_CSTRING, PG_GETARG_INT32, PG_LATIN1, PG_RETURN_VOID, PG_UTF8, pg_utf8_islegal(), pg_utf_mblen(), report_invalid_encoding(), and report_untranslatable_char().
{ unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2); unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); int len = PG_GETARG_INT32(4); unsigned short c, c1; CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_LATIN1); while (len > 0) { c = *src; if (c == 0) report_invalid_encoding(PG_UTF8, (const char *) src, len); /* fast path for ASCII-subset characters */ if (!IS_HIGHBIT_SET(c)) { *dest++ = c; src++; len--; } else { int l = pg_utf_mblen(src); if (l > len || !pg_utf8_islegal(src, l)) report_invalid_encoding(PG_UTF8, (const char *) src, len); if (l != 2) report_untranslatable_char(PG_UTF8, PG_LATIN1, (const char *) src, len); c1 = src[1] & 0x3f; c = ((c & 0x1f) << 6) | c1; if (c >= 0x80 && c <= 0xff) { *dest++ = (unsigned char) c; src += 2; len -= 2; } else report_untranslatable_char(PG_UTF8, PG_LATIN1, (const char *) src, len); } } *dest = '\0'; PG_RETURN_VOID(); }
Definition at line 18 of file utf8_and_iso8859_1.c.