diff options
Diffstat (limited to 'src/backend/utils/adt/xml.c')
-rw-r--r-- | src/backend/utils/adt/xml.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index 0e656b22884..537340811cb 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.47 2007/09/23 21:36:42 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.48 2007/10/13 20:18:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -127,6 +127,24 @@ XmlOptionType xmloption; #define NAMESPACE_SQLXML "http://standards.iso.org/iso/9075/2003/sqlxml" +#ifdef USE_LIBXML + +static int +xmlChar_to_encoding(xmlChar *encoding_name) +{ + int encoding = pg_char_to_encoding((char *) encoding_name); + + if (encoding < 0) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid encoding name \"%s\"", + (char *) encoding_name))); + return encoding; +} + +#endif + + Datum xml_in(PG_FUNCTION_ARGS) { @@ -263,7 +281,9 @@ xml_recv(PG_FUNCTION_ARGS) /* Now that we know what we're dealing with, convert to server encoding */ newstr = (char *) pg_do_encoding_conversion((unsigned char *) str, nbytes, - encoding ? pg_char_to_encoding((char *) encoding) : PG_UTF8, + encoding ? + xmlChar_to_encoding(encoding) : + PG_UTF8, GetDatabaseEncoding()); if (newstr != str) @@ -1084,9 +1104,9 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, xml utf8string = pg_do_encoding_conversion(string, len, - encoding - ? pg_char_to_encoding((char *) encoding) - : GetDatabaseEncoding(), + encoding ? + xmlChar_to_encoding(encoding) : + GetDatabaseEncoding(), PG_UTF8); xml_init(); |