aboutsummaryrefslogtreecommitdiffstats
path: root/error.c
diff options
context:
space:
mode:
authorWilliam M. Brack <wbrack@src.gnome.org>2004-10-02 03:54:00 +0000
committerWilliam M. Brack <wbrack@src.gnome.org>2004-10-02 03:54:00 +0000
commitd0407520d8eaeebb527653995b6345339325d064 (patch)
tree9e910751befb3430587468ad76f78623f7026216 /error.c
parent8b817dace50506292c5c5feea6ff4374b0aa2691 (diff)
downloadandroid_external_libxml2-d0407520d8eaeebb527653995b6345339325d064.tar.gz
android_external_libxml2-d0407520d8eaeebb527653995b6345339325d064.tar.bz2
android_external_libxml2-d0407520d8eaeebb527653995b6345339325d064.zip
added some coding to attempt to display which file contains an error when
* error.c: added some coding to attempt to display which file contains an error when using XInclude (bug 152623)
Diffstat (limited to 'error.c')
-rw-r--r--error.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/error.c b/error.c
index 8eb61613..b0660d81 100644
--- a/error.c
+++ b/error.c
@@ -447,7 +447,7 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
char *str = NULL;
xmlParserInputPtr input = NULL;
xmlErrorPtr to = &xmlLastError;
- xmlChar *base = NULL;
+ xmlNodePtr baseptr = NULL;
if ((xmlGetWarningsDefaultValue == 0) && (level == XML_ERR_WARNING))
return;
@@ -509,14 +509,14 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
int i;
if ((node->doc != NULL) && (node->doc->URL != NULL))
- base = xmlStrdup(node->doc->URL);
+ baseptr = node;
for (i = 0;
((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
i++)
node = node->parent;
- if ((base == NULL) && (node != NULL) &&
+ if ((baseptr == NULL) && (node != NULL) &&
(node->doc != NULL) && (node->doc->URL != NULL))
- base = xmlStrdup(node->doc->URL);
+ baseptr = node;
if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
line = node->line;
@@ -532,9 +532,33 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
to->level = level;
if (file != NULL)
to->file = (char *) xmlStrdup((const xmlChar *) file);
- else if (base != NULL) {
- to->file = (char *) base;
- file = (char *) base;
+ else if (baseptr != NULL) {
+#ifdef LIBXML_XINCLUDE_ENABLED
+ /*
+ * We check if the error is within an XInclude section and,
+ * if so, attempt to print out the href of the XInclude instead
+ * of the usual "base" (doc->URL) for the node (bug 152623).
+ */
+ xmlNodePtr prev = baseptr;
+ int inclcount = 0;
+ while (prev != NULL) {
+ if (prev->prev == NULL)
+ prev = prev->parent;
+ else {
+ prev = prev->prev;
+ if (prev->type == XML_XINCLUDE_START) {
+ if (--inclcount < 0)
+ break;
+ } else if (prev->type == XML_XINCLUDE_END)
+ inclcount++;
+ }
+ }
+ if (prev != NULL) {
+ to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
+ } else
+#endif
+ to->file = (char *) xmlStrdup(baseptr->doc->URL);
+ file = to->file;
}
to->line = line;
if (str1 != NULL)