aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/xml.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-12-29 16:44:28 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-12-29 16:44:28 +0000
commitdbfb72744499af9960a4987ef278f4de85ab8cf4 (patch)
tree9ab1bff52639a8808e512b2a21fb171c6698e148 /src/backend/utils/adt/xml.c
parent8832f0f35896c16efd7de4cf35ef97348c90f2f6 (diff)
downloadpostgresql-dbfb72744499af9960a4987ef278f4de85ab8cf4.tar.gz
postgresql-dbfb72744499af9960a4987ef278f4de85ab8cf4.zip
Fix multiple breakages in last XML patch.
Diffstat (limited to 'src/backend/utils/adt/xml.c')
-rw-r--r--src/backend/utils/adt/xml.c81
1 files changed, 41 insertions, 40 deletions
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index 6f4c87f824f..52909ceb16d 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.8 2006/12/29 10:50:22 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.9 2006/12/29 16:44:28 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -862,8 +862,7 @@ xml_ereport_by_code(int level, int sqlcode,
/*
- * Convert one char in the current server encoding to a Unicode
- * codepoint.
+ * Convert one char in the current server encoding to a Unicode codepoint.
*/
static pg_wchar
sqlchar_to_unicode(char *s)
@@ -882,42 +881,6 @@ sqlchar_to_unicode(char *s)
}
-static char *
-unicode_to_sqlchar(pg_wchar c)
-{
- char utf8string[4] = { '\0', '\0', '\0', '\0' };
-
- 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 (char *) pg_do_encoding_conversion((unsigned char *) utf8string,
- pg_mblen(utf8string),
- PG_UTF8,
- GetDatabaseEncoding());
-}
-
-
static bool
is_valid_xml_namefirst(pg_wchar c)
{
@@ -988,7 +951,45 @@ map_sql_identifier_to_xml_name(char *ident, bool fully_escaped)
/*
- * The inverse; see SQL/XML:2003 section 9.17.
+ * Map a Unicode codepoint into the current server encoding.
+ */
+static char *
+unicode_to_sqlchar(pg_wchar c)
+{
+ static unsigned char utf8string[4];
+
+ 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 (char *) pg_do_encoding_conversion(utf8string,
+ pg_mblen((char *) utf8string),
+ PG_UTF8,
+ GetDatabaseEncoding());
+}
+
+
+/*
+ * Map XML name to SQL identifier; see SQL/XML:2003 section 9.17.
*/
char *
map_xml_name_to_sql_identifier(char *name)