1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*
2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error.c: module displaying/handling XML parser errors
3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software.
5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Daniel Veillard <daniel@veillard.com>
7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IN_LIBXML
10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h"
11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h>
13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdarg.h>
14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h>
15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlerror.h>
16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h>
17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h>
18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL xmlGenericErrorDefaultFunc	(void *ctx ATTRIBUTE_UNUSED,
20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				 const char *msg,
21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project				 ...);
22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_GET_VAR_STR(msg, str) {				\
24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int       size, prev_size = -1;				\
25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int       chars;						\
26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char      *larger;						\
27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    va_list   ap;						\
28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project								\
29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str = (char *) xmlMalloc(150);				\
30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL) {						\
31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project								\
32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    size = 150;							\
33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project								\
3460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott    while (size < 64000) {					\
35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	va_start(ap, msg);					\
3694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	chars = vsnprintf(str, size, msg, ap);			\
37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	va_end(ap);						\
38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((chars > -1) && (chars < size)) {			\
39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (prev_size == chars) {				\
40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		break;						\
41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {						\
42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		prev_size = chars;				\
43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }							\
44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}							\
45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (chars > -1)						\
46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    size += chars + 1;					\
47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else							\
48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    size += 100;					\
49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\
50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    break;						\
51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}							\
52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	str = larger;						\
53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }}								\
54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
5794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *									*
5894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *			Handling of out of context errors		*
5994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *									*
60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGenericErrorDefaultFunc:
64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an error context
65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
6794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Default handler for out of context error messages.
69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    va_list args;
73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (xmlGenericErrorContext == NULL)
75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericErrorContext = (void *) stderr;
76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    va_start(args, msg);
78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    vfprintf((FILE *)xmlGenericErrorContext, msg, args);
79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    va_end(args);
80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * initGenericErrorDefaultFunc:
84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @handler:  the handler
8594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set or reset (if NULL) the default handler for generic errors
87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to the builtin error function.
88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectinitGenericErrorDefaultFunc(xmlGenericErrorFunc * handler)
91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (handler == NULL)
93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlGenericError = xmlGenericErrorDefaultFunc;
94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlGenericError = (*handler);
96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSetGenericErrorFunc:
100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  the new error handling context
101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @handler:  the new handler function
102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Function to reset the handler and the error context for out of
104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * context error messages.
105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This simply means that @handler will be called for subsequent
106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error messages while not parsing nor validating. And @ctx will
107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be passed as first argument to @handler
108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * One can simply force messages to be emitted to another FILE * than
109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * stderr by setting @ctx to this file handle and @handler to NULL.
110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * For multi-threaded applications, this must be set separately for each thread.
111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) {
114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericErrorContext = ctx;
115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (handler != NULL)
116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError = handler;
117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError = xmlGenericErrorDefaultFunc;
119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSetStructuredErrorFunc:
123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  the new error handling context
124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @handler:  the new handler function
125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Function to reset the handler and the error context for out of
127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * context structured error messages.
128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This simply means that @handler will be called for subsequent
129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error messages while not parsing nor validating. And @ctx will
130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be passed as first argument to @handler
131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * For multi-threaded applications, this must be set separately for each thread.
132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
135df143a5041f03a22808b59c76698770b74692815Selim Gurun    xmlStructuredErrorContext = ctx;
136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlStructuredError = handler;
137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
14094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *									*
14194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *			Handling of parsing errors			*
14294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *									*
143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserPrintFileInfo:
147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input:  an xmlParserInputPtr input
14894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Displays the associated file and line informations for the current input
150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserPrintFileInfo(xmlParserInputPtr input) {
154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (input != NULL) {
155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (input->filename)
156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext,
157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "%s:%d: ", input->filename,
158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    input->line);
159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext,
161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    "Entity: line %d: ", input->line);
162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserPrintFileContext:
167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input:  an xmlParserInputPtr input
16894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Displays current context within the input content for error tracking
170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
17394442ad4107000e6d49f9b85a46a591495a57632Selim GurunxmlParserPrintFileContextInternal(xmlParserInputPtr input ,
174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlGenericErrorFunc channel, void *data ) {
175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *cur, *base;
176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    unsigned int n, col;	/* GCC warns if signed, because compared with sizeof() */
177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar  content[81]; /* space for 80 chars + line terminator */
178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlChar *ctnt;
179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (input == NULL) return;
181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    cur = input->cur;
182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    base = input->base;
183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* skip backwards over any end-of-lines */
184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	cur--;
186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    n = 0;
188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* search backwards for beginning-of-line (to max buff size) */
18994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    while ((n++ < (sizeof(content)-1)) && (cur > base) &&
19094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	   (*(cur) != '\n') && (*(cur) != '\r'))
191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        cur--;
192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* calculate the error position in terms of the current position */
194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    col = input->cur - cur;
195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* search forward for end-of-line (to max buff size) */
196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    n = 0;
197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctnt = content;
198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* copy selected text to our buffer */
19994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun    while ((*cur != 0) && (*(cur) != '\n') &&
20094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	   (*(cur) != '\r') && (n < sizeof(content)-1)) {
201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		*ctnt++ = *cur++;
202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	n++;
203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    *ctnt = 0;
205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* print out the selected text */
206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    channel(data ,"%s\n", content);
207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* create blank line with problem pointer */
208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    n = 0;
209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    ctnt = content;
210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /* (leave buffer space for pointer + line terminator) */
211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (*(ctnt) != '\t')
213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    *(ctnt) = ' ';
214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctnt++;
215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    *ctnt++ = '^';
217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    *ctnt = 0;
218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    channel(data ,"%s\n", content);
219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserPrintFileContext:
223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input:  an xmlParserInputPtr input
22494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Displays current context within the input content for error tracking
226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserPrintFileContext(xmlParserInputPtr input) {
229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project   xmlParserPrintFileContextInternal(input, xmlGenericError,
230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                                     xmlGenericErrorContext);
231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlReportError:
235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @err: the error
236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the parser context or NULL
237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: the formatted error message
238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Report an erro with its context, replace the 4 old error/warning
240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * routines.
241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void
243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project               xmlGenericErrorFunc channel, void *data)
245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char *file = NULL;
247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int line = 0;
248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int code = -1;
249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int domain;
250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    const xmlChar *name = NULL;
251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr node;
252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlErrorLevel level;
253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr cur = NULL;
255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err == NULL)
257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (channel == NULL) {
260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel = xmlGenericError;
261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	data = xmlGenericErrorContext;
262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    file = err->file;
264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    line = err->line;
265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    code = err->code;
266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    domain = err->domain;
267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    level = err->level;
268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    node = err->node;
269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (code == XML_ERR_OK)
271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        name = node->name;
275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Maintain the compatibility with the legacy error handling
278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        input = ctxt->input;
281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((input != NULL) && (input->filename == NULL) &&
282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            (ctxt->inputNr > 1)) {
283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            cur = input;
284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            input = ctxt->inputTab[ctxt->inputNr - 2];
285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (input != NULL) {
287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (input->filename)
288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                channel(data, "%s:%d: ", input->filename, input->line);
289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            else if ((line != 0) && (domain == XML_FROM_PARSER))
290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                channel(data, "Entity: line %d: ", input->line);
291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (file != NULL)
294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "%s:%d: ", file, line);
29594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun        else if ((line != 0) &&
29694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	         ((domain == XML_FROM_PARSER) || (domain == XML_FROM_SCHEMASV)||
29794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun		  (domain == XML_FROM_SCHEMASP)||(domain == XML_FROM_DTD) ||
29894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun		  (domain == XML_FROM_RELAXNGP)||(domain == XML_FROM_RELAXNGV)))
299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Entity: line %d: ", line);
300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (name != NULL) {
302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        channel(data, "element %s: ", name);
303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (domain) {
305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_PARSER:
306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "parser ");
307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_NAMESPACE:
309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "namespace ");
310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_DTD:
312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_VALID:
313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "validity ");
314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_HTML:
316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "HTML parser ");
317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_MEMORY:
319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "memory ");
320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_OUTPUT:
322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "output ");
323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_IO:
325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "I/O ");
326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XINCLUDE:
328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "XInclude ");
329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XPATH:
331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "XPath ");
332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XPOINTER:
334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "parser ");
335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_REGEXP:
337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "regexp ");
338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_MODULE:
340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "module ");
341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_SCHEMASV:
343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Schemas validity ");
344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_SCHEMASP:
346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Schemas parser ");
347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_RELAXNGP:
349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Relax-NG parser ");
350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_RELAXNGV:
352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Relax-NG validity ");
353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_CATALOG:
355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Catalog ");
356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_C14N:
358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "C14N ");
359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XSLT:
361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "XSLT ");
362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_I18N:
364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "encoding ");
365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
36694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun        case XML_FROM_SCHEMATRONV:
36794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            channel(data, "schematron ");
36894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            break;
36994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun        case XML_FROM_BUFFER:
37094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            channel(data, "internal buffer ");
37194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            break;
37294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun        case XML_FROM_URI:
37394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            channel(data, "URI ");
37494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun            break;
375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        default:
376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (level) {
379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_NONE:
380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, ": ");
381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_WARNING:
383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "warning : ");
384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_ERROR:
386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "error : ");
387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_FATAL:
389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "error : ");
390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL) {
393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        int len;
394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	len = xmlStrlen((const xmlChar *)str);
395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((len > 0) && (str[len - 1] != '\n'))
396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel(data, "%s\n", str);
397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel(data, "%s", str);
399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        channel(data, "%s\n", "out of memory error");
401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlParserPrintFileContextInternal(input, channel, data);
405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (cur != NULL) {
406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (cur->filename)
407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                channel(data, "%s:%d: \n", cur->filename, cur->line);
408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            else if ((line != 0) && (domain == XML_FROM_PARSER))
409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                channel(data, "Entity: line %d: \n", cur->line);
410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlParserPrintFileContextInternal(cur, channel, data);
411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (err->int1 < 100) &&
415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlChar buf[150];
417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int i;
418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel(data, "%s\n", err->str1);
420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	for (i=0;i < err->int1;i++)
421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     buf[i] = ' ';
422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	buf[i++] = '^';
423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	buf[i] = 0;
424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel(data, "%s\n", buf);
425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlRaiseError:
430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @schannel: the structured callback channel
431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @channel: the old callback channel
432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: the callback data
433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the parser context or NULL
434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the parser context or NULL
435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @domain: the domain for the error
436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @code: the code for the error
437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @level: the xmlErrorLevel for the error
438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @file: the file source of the error (or NULL)
439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @line: the line of the error or 0 if N/A
440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1: extra string info
441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2: extra string info
442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str3: extra string info
443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @int1: extra int info
44494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @col: column number of the error or 0 if N/A
445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Update the appropriate global or contextual error structure,
449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * then forward the error message down the parser or generic
450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error callback handler
451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlRaiseError(xmlStructuredErrorFunc schannel,
454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              xmlGenericErrorFunc channel, void *data, void *ctx,
455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              void *nod, int domain, int code, xmlErrorLevel level,
456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              const char *file, int line, const char *str1,
457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              const char *str2, const char *str3, int int1, int col,
458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	      const char *msg, ...)
459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = NULL;
461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr node = (xmlNodePtr) nod;
462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char *str = NULL;
463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlErrorPtr to = &xmlLastError;
465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr baseptr = NULL;
466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
467df143a5041f03a22808b59c76698770b74692815Selim Gurun    if (code == XML_ERR_OK)
468df143a5041f03a22808b59c76698770b74692815Selim Gurun        return;
469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((xmlGetWarningsDefaultValue == 0) && (level == XML_ERR_WARNING))
470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt = (xmlParserCtxtPtr) ctx;
475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
476df143a5041f03a22808b59c76698770b74692815Selim Gurun	    (ctxt->sax->initialized == XML_SAX2_MAGIC) &&
477df143a5041f03a22808b59c76698770b74692815Selim Gurun	    (ctxt->sax->serror != NULL)) {
478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    schannel = ctxt->sax->serror;
479df143a5041f03a22808b59c76698770b74692815Selim Gurun	    data = ctxt->userData;
480df143a5041f03a22808b59c76698770b74692815Selim Gurun	}
481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Check if structured error handler set
484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (schannel == NULL) {
486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	schannel = xmlStructuredError;
487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * if user has defined handler, change data ptr to user's choice
489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (schannel != NULL)
491df143a5041f03a22808b59c76698770b74692815Selim Gurun	    data = xmlStructuredErrorContext;
492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Formatting the message
495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (msg == NULL) {
497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        str = (char *) xmlStrdup(BAD_CAST "No error message provided");
498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        XML_GET_VAR_STR(msg, str);
500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * specific processing if a parser context is provided
504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (file == NULL) {
507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            input = ctxt->input;
508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if ((input != NULL) && (input->filename == NULL) &&
509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                (ctxt->inputNr > 1)) {
510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                input = ctxt->inputTab[ctxt->inputNr - 2];
511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (input != NULL) {
513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                file = input->filename;
514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                line = input->line;
515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                col = input->col;
516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to = &ctxt->lastError;
519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if ((node != NULL) && (file == NULL)) {
520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int i;
521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((node->doc != NULL) && (node->doc->URL != NULL)) {
523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    baseptr = node;
524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*	    file = (const char *) node->doc->URL; */
525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	for (i = 0;
527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     ((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     i++)
529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     node = node->parent;
530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((baseptr == NULL) && (node != NULL) &&
531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (node->doc != NULL) && (node->doc->URL != NULL))
532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    baseptr = node;
533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    line = node->line;
53694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	if ((line == 0) || (line == 65535))
53794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	    line = xmlGetLineNo(node);
538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Save the information about the error
542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlResetError(to);
544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->domain = domain;
545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->code = code;
546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->message = str;
547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->level = level;
548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (file != NULL)
549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->file = (char *) xmlStrdup((const xmlChar *) file);
550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if (baseptr != NULL) {
551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XINCLUDE_ENABLED
552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * We check if the error is within an XInclude section and,
554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * if so, attempt to print out the href of the XInclude instead
555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * of the usual "base" (doc->URL) for the node (bug 152623).
556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlNodePtr prev = baseptr;
558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int inclcount = 0;
559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	while (prev != NULL) {
560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (prev->prev == NULL)
561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        prev = prev->parent;
562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else {
563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        prev = prev->prev;
564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (prev->type == XML_XINCLUDE_START) {
565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (--inclcount < 0)
566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		        break;
567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		} else if (prev->type == XML_XINCLUDE_END)
568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    inclcount++;
569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (prev != NULL) {
572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (prev->type == XML_XINCLUDE_START) {
573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		prev->type = XML_ELEMENT_NODE;
574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		prev->type = XML_XINCLUDE_START;
576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else
580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    to->file = (char *) xmlStrdup(baseptr->doc->URL);
582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((to->file == NULL) && (node != NULL) && (node->doc != NULL)) {
583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    to->file = (char *) xmlStrdup(node->doc->URL);
584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->line = line;
587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str1 != NULL)
588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->str1 = (char *) xmlStrdup((const xmlChar *) str1);
589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str2 != NULL)
590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->str2 = (char *) xmlStrdup((const xmlChar *) str2);
591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str3 != NULL)
592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->str3 = (char *) xmlStrdup((const xmlChar *) str3);
593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int1 = int1;
594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int2 = col;
595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->node = node;
596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->ctxt = ctx;
597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to != &xmlLastError)
599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCopyError(to,&xmlLastError);
600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
601df143a5041f03a22808b59c76698770b74692815Selim Gurun    if (schannel != NULL) {
602df143a5041f03a22808b59c76698770b74692815Selim Gurun	schannel(data, to);
603df143a5041f03a22808b59c76698770b74692815Selim Gurun	return;
604df143a5041f03a22808b59c76698770b74692815Selim Gurun    }
605df143a5041f03a22808b59c76698770b74692815Selim Gurun
606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Find the callback channel if channel param is NULL
608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
609df143a5041f03a22808b59c76698770b74692815Selim Gurun    if ((ctxt != NULL) && (channel == NULL) &&
610df143a5041f03a22808b59c76698770b74692815Selim Gurun        (xmlStructuredError == NULL) && (ctxt->sax != NULL)) {
611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (level == XML_ERR_WARNING)
612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel = ctxt->sax->warning;
613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel = ctxt->sax->error;
615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	data = ctxt->userData;
616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (channel == NULL) {
617df143a5041f03a22808b59c76698770b74692815Selim Gurun	channel = xmlGenericError;
61894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	if (ctxt != NULL) {
61994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	    data = ctxt;
62094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	} else {
621df143a5041f03a22808b59c76698770b74692815Selim Gurun	    data = xmlGenericErrorContext;
62294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun	}
623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (channel == NULL)
625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((channel == xmlParserError) ||
628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (channel == xmlParserWarning) ||
629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(channel == xmlParserValidityError) ||
630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(channel == xmlParserValidityWarning))
631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlReportError(to, ctxt, str, NULL, NULL);
632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if ((channel == (xmlGenericErrorFunc) fprintf) ||
633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             (channel == xmlGenericErrorDefaultFunc))
634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlReportError(to, ctxt, str, channel, data);
635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel(data, "%s", str);
637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlSimpleError:
641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @domain: where the error comes from
642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @code: the error code
643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the context node
644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra:  extra informations
645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an out of memory condition
647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlSimpleError(int domain, int code, xmlNodePtr node,
650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                 const char *msg, const char *extra)
651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (code == XML_ERR_NO_MEMORY) {
654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (extra)
655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    NULL, NULL, 0, 0,
658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    "Memory allocation failed : %s\n", extra);
659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    NULL, NULL, 0, 0, "Memory allocation failed\n");
663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	__xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			code, XML_ERR_ERROR, NULL, 0, extra,
666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			NULL, NULL, 0, 0, msg, extra);
667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserError:
671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
67494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format an error messages, gives file, line, position and
676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * extra parameters.
677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserError(void *ctx, const char *msg, ...)
680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr cur = NULL;
684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input = ctxt->input;
688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((input != NULL) && (input->filename == NULL) &&
689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->inputNr > 1)) {
690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    cur = input;
691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->inputTab[ctxt->inputNr - 2];
692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileInfo(input);
694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "error: ");
697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (cur != NULL) {
705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileInfo(cur);
706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext, "\n");
707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileContext(cur);
708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserWarning:
714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
71794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format a warning messages, gives file, line, position and
719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * extra parameters.
720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserWarning(void *ctx, const char *msg, ...)
723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr cur = NULL;
727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input = ctxt->input;
731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((input != NULL) && (input->filename == NULL) &&
732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->inputNr > 1)) {
733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    cur = input;
734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->inputTab[ctxt->inputNr - 2];
735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileInfo(input);
737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
73894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "warning: ");
740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (cur != NULL) {
748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileInfo(cur);
749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext, "\n");
750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileContext(cur);
751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
75694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *									*
75794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *			Handling of validation errors			*
75894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *									*
759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserValidityError:
763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
76694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format an validity error messages, gives file,
768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * line, position and extra parameters.
769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserValidityError(void *ctx, const char *msg, ...)
772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int len = xmlStrlen((const xmlChar *) msg);
777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    static int had_info = 0;
778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((len > 1) && (msg[len - 2] != ':')) {
780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt != NULL) {
781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->input;
782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((input->filename == NULL) && (ctxt->inputNr > 1))
783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		input = ctxt->inputTab[ctxt->inputNr - 2];
78494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (had_info == 0) {
786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlParserPrintFileInfo(input);
787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext, "validity error: ");
790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	had_info = 0;
791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	had_info = 1;
793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (input != NULL)) {
801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserValidityWarning:
807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
81094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun *
811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format a validity warning messages, gives file, line,
812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * position and extra parameters.
813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserValidityWarning(void *ctx, const char *msg, ...)
816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int len = xmlStrlen((const xmlChar *) msg);
821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (len != 0) && (msg[len - 1] != ':')) {
823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input = ctxt->input;
824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((input->filename == NULL) && (ctxt->inputNr > 1))
825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->inputTab[ctxt->inputNr - 2];
826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileInfo(input);
828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
82994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun
830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "validity warning: ");
831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *			Extended Error Handling				*
845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGetLastError:
850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the last global error registered. This is per thread if compiled
852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with thread support.
853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns NULL if no error occured or a pointer to the error
855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrorPtr
857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGetLastError(void)
858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (xmlLastError.code == XML_ERR_OK)
860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (NULL);
861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (&xmlLastError);
862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlResetError:
866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @err: pointer to the error.
867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the error.
869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlResetError(xmlErrorPtr err)
872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err == NULL)
874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->code == XML_ERR_OK)
876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->message != NULL)
878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->message);
879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->file != NULL)
880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->file);
881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->str1 != NULL)
882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->str1);
883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->str2 != NULL)
884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->str2);
885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->str3 != NULL)
886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->str3);
887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    memset(err, 0, sizeof(xmlError));
888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    err->code = XML_ERR_OK;
889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlResetLastError:
893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the last global error registered. For parsing error
895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this does not change the well-formedness result.
896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlResetLastError(void)
899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (xmlLastError.code == XML_ERR_OK)
901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlResetError(&xmlLastError);
903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtGetLastError:
907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the last parsing error registered.
910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns NULL if no error occured or a pointer to the error
912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrorPtr
914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtGetLastError(void *ctx)
915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt == NULL)
919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (NULL);
920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->lastError.code == XML_ERR_OK)
921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (NULL);
922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (&ctxt->lastError);
923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtResetLastError:
927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the last global error registered. For parsing error
930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this does not change the well-formedness result.
931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtResetLastError(void *ctx)
934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt == NULL)
938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
939df143a5041f03a22808b59c76698770b74692815Selim Gurun    ctxt->errNo = XML_ERR_OK;
940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->lastError.code == XML_ERR_OK)
941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlResetError(&ctxt->lastError);
943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCopyError:
947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @from:  a source error
948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @to:  a target error
949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Save the original error to the new place.
951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success and -1 in case of error.
953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCopyError(xmlErrorPtr from, xmlErrorPtr to) {
956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char *message, *file, *str1, *str2, *str3;
957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((from == NULL) || (to == NULL))
959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return(-1);
960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    message = (char *) xmlStrdup((xmlChar *) from->message);
962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    file = (char *) xmlStrdup ((xmlChar *) from->file);
963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str1 = (char *) xmlStrdup ((xmlChar *) from->str1);
964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str2 = (char *) xmlStrdup ((xmlChar *) from->str2);
965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str3 = (char *) xmlStrdup ((xmlChar *) from->str3);
966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->message != NULL)
968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->message);
969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->file != NULL)
970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->file);
971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->str1 != NULL)
972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->str1);
973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->str2 != NULL)
974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->str2);
975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->str3 != NULL)
976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->str3);
977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->domain = from->domain;
978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->code = from->code;
979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->level = from->level;
980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->line = from->line;
981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->node = from->node;
982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int1 = from->int1;
983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int2 = from->int2;
984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->node = from->node;
985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->ctxt = from->ctxt;
986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->message = message;
987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->file = file;
988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->str1 = str1;
989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->str2 = str2;
990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->str3 = str3;
991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return 0;
993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_error
996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h"
997