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);					\
36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project  	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/************************************************************************
57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 									*
58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 			Handling of out of context errors		*
59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 									*
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
67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
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
85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
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/************************************************************************
140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 									*
141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 			Handling of parsing errors			*
142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 									*
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
148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
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
168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
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
173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserPrintFileContextInternal(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) */
189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while ((n++ < (sizeof(content)-1)) && (cur > base) &&
190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    	   (*(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 */
199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    while ((*cur != 0) && (*(cur) != '\n') &&
200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    	   (*(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
224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
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);
295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else if ((line != 0) && (domain == XML_FROM_PARSER))
296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Entity: line %d: ", line);
297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (name != NULL) {
299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        channel(data, "element %s: ", name);
300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (domain) {
302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_PARSER:
303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "parser ");
304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_NAMESPACE:
306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "namespace ");
307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_DTD:
309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_VALID:
310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "validity ");
311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_HTML:
313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "HTML parser ");
314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_MEMORY:
316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "memory ");
317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_OUTPUT:
319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "output ");
320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_IO:
322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "I/O ");
323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XINCLUDE:
325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "XInclude ");
326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XPATH:
328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "XPath ");
329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XPOINTER:
331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "parser ");
332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_REGEXP:
334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "regexp ");
335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_MODULE:
337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "module ");
338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_SCHEMASV:
340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Schemas validity ");
341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_SCHEMASP:
343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Schemas parser ");
344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_RELAXNGP:
346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Relax-NG parser ");
347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_RELAXNGV:
349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Relax-NG validity ");
350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_CATALOG:
352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "Catalog ");
353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_C14N:
355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "C14N ");
356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_XSLT:
358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "XSLT ");
359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_FROM_I18N:
361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "encoding ");
362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        default:
364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    switch (level) {
367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_NONE:
368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, ": ");
369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_WARNING:
371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "warning : ");
372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_ERROR:
374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "error : ");
375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        case XML_ERR_FATAL:
377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            channel(data, "error : ");
378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            break;
379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL) {
381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        int len;
382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	len = xmlStrlen((const xmlChar *)str);
383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((len > 0) && (str[len - 1] != '\n'))
384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel(data, "%s\n", str);
385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel(data, "%s", str);
387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        channel(data, "%s\n", "out of memory error");
389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlParserPrintFileContextInternal(input, channel, data);
393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (cur != NULL) {
394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (cur->filename)
395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                channel(data, "%s:%d: \n", cur->filename, cur->line);
396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            else if ((line != 0) && (domain == XML_FROM_PARSER))
397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                channel(data, "Entity: line %d: \n", cur->line);
398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            xmlParserPrintFileContextInternal(cur, channel, data);
399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (err->int1 < 100) &&
403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlChar buf[150];
405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int i;
406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel(data, "%s\n", err->str1);
408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	for (i=0;i < err->int1;i++)
409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     buf[i] = ' ';
410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	buf[i++] = '^';
411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	buf[i] = 0;
412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel(data, "%s\n", buf);
413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlRaiseError:
418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @schannel: the structured callback channel
419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @channel: the old callback channel
420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: the callback data
421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the parser context or NULL
422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the parser context or NULL
423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @domain: the domain for the error
424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @code: the code for the error
425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @level: the xmlErrorLevel for the error
426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @file: the file source of the error (or NULL)
427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @line: the line of the error or 0 if N/A
428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1: extra string info
429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2: extra string info
430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str3: extra string info
431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @int1: extra int info
432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @col: column number of the error or 0 if N/A
433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Update the appropriate global or contextual error structure,
437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * then forward the error message down the parser or generic
438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error callback handler
439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlRaiseError(xmlStructuredErrorFunc schannel,
442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              xmlGenericErrorFunc channel, void *data, void *ctx,
443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              void *nod, int domain, int code, xmlErrorLevel level,
444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              const char *file, int line, const char *str1,
445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project              const char *str2, const char *str3, int int1, int col,
446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	      const char *msg, ...)
447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = NULL;
449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr node = (xmlNodePtr) nod;
450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char *str = NULL;
451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlErrorPtr to = &xmlLastError;
453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlNodePtr baseptr = NULL;
454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
455df143a5041f03a22808b59c76698770b74692815Selim Gurun    if (code == XML_ERR_OK)
456df143a5041f03a22808b59c76698770b74692815Selim Gurun        return;
457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((xmlGetWarningsDefaultValue == 0) && (level == XML_ERR_WARNING))
458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	ctxt = (xmlParserCtxtPtr) ctx;
463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
464df143a5041f03a22808b59c76698770b74692815Selim Gurun	    (ctxt->sax->initialized == XML_SAX2_MAGIC) &&
465df143a5041f03a22808b59c76698770b74692815Selim Gurun	    (ctxt->sax->serror != NULL)) {
466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    schannel = ctxt->sax->serror;
467df143a5041f03a22808b59c76698770b74692815Selim Gurun	    data = ctxt->userData;
468df143a5041f03a22808b59c76698770b74692815Selim Gurun	}
469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Check if structured error handler set
472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (schannel == NULL) {
474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	schannel = xmlStructuredError;
475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * if user has defined handler, change data ptr to user's choice
477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (schannel != NULL)
479df143a5041f03a22808b59c76698770b74692815Selim Gurun	    data = xmlStructuredErrorContext;
480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Formatting the message
483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (msg == NULL) {
485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        str = (char *) xmlStrdup(BAD_CAST "No error message provided");
486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        XML_GET_VAR_STR(msg, str);
488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * specific processing if a parser context is provided
492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (file == NULL) {
495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            input = ctxt->input;
496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if ((input != NULL) && (input->filename == NULL) &&
497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                (ctxt->inputNr > 1)) {
498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                input = ctxt->inputTab[ctxt->inputNr - 2];
499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            if (input != NULL) {
501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                file = input->filename;
502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                line = input->line;
503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                col = input->col;
504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project            }
505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        }
506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to = &ctxt->lastError;
507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if ((node != NULL) && (file == NULL)) {
508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int i;
509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((node->doc != NULL) && (node->doc->URL != NULL)) {
511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    baseptr = node;
512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/*	    file = (const char *) node->doc->URL; */
513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	for (i = 0;
515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     ((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     i++)
517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	     node = node->parent;
518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if ((baseptr == NULL) && (node != NULL) &&
519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (node->doc != NULL) && (node->doc->URL != NULL))
520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    baseptr = node;
521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    line = node->line;
524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Save the information about the error
528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlResetError(to);
530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->domain = domain;
531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->code = code;
532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->message = str;
533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->level = level;
534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (file != NULL)
535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->file = (char *) xmlStrdup((const xmlChar *) file);
536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if (baseptr != NULL) {
537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XINCLUDE_ENABLED
538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	/*
539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * We check if the error is within an XInclude section and,
540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * if so, attempt to print out the href of the XInclude instead
541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 * of the usual "base" (doc->URL) for the node (bug 152623).
542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	 */
543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlNodePtr prev = baseptr;
544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	int inclcount = 0;
545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	while (prev != NULL) {
546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (prev->prev == NULL)
547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        prev = prev->parent;
548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    else {
549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	        prev = prev->prev;
550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		if (prev->type == XML_XINCLUDE_START) {
551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    if (--inclcount < 0)
552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		        break;
553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		} else if (prev->type == XML_XINCLUDE_END)
554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		    inclcount++;
555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (prev != NULL) {
558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (prev->type == XML_XINCLUDE_START) {
559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		prev->type = XML_ELEMENT_NODE;
560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		prev->type = XML_XINCLUDE_START;
562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    } else {
563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	} else
566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif
567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    to->file = (char *) xmlStrdup(baseptr->doc->URL);
568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((to->file == NULL) && (node != NULL) && (node->doc != NULL)) {
569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    to->file = (char *) xmlStrdup(node->doc->URL);
570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->line = line;
573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str1 != NULL)
574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->str1 = (char *) xmlStrdup((const xmlChar *) str1);
575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str2 != NULL)
576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->str2 = (char *) xmlStrdup((const xmlChar *) str2);
577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str3 != NULL)
578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        to->str3 = (char *) xmlStrdup((const xmlChar *) str3);
579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int1 = int1;
580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int2 = col;
581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->node = node;
582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->ctxt = ctx;
583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to != &xmlLastError)
585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlCopyError(to,&xmlLastError);
586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
587df143a5041f03a22808b59c76698770b74692815Selim Gurun    if (schannel != NULL) {
588df143a5041f03a22808b59c76698770b74692815Selim Gurun	schannel(data, to);
589df143a5041f03a22808b59c76698770b74692815Selim Gurun	return;
590df143a5041f03a22808b59c76698770b74692815Selim Gurun    }
591df143a5041f03a22808b59c76698770b74692815Selim Gurun
592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    /*
593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     * Find the callback channel if channel param is NULL
594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project     */
595df143a5041f03a22808b59c76698770b74692815Selim Gurun    if ((ctxt != NULL) && (channel == NULL) &&
596df143a5041f03a22808b59c76698770b74692815Selim Gurun        (xmlStructuredError == NULL) && (ctxt->sax != NULL)) {
597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        if (level == XML_ERR_WARNING)
598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel = ctxt->sax->warning;
599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        else
600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    channel = ctxt->sax->error;
601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	data = ctxt->userData;
602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else if (channel == NULL) {
603df143a5041f03a22808b59c76698770b74692815Selim Gurun	channel = xmlGenericError;
604df143a5041f03a22808b59c76698770b74692815Selim Gurun	if (!data)
605df143a5041f03a22808b59c76698770b74692815Selim Gurun	    data = xmlGenericErrorContext;
606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (channel == NULL)
608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((channel == xmlParserError) ||
611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        (channel == xmlParserWarning) ||
612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(channel == xmlParserValidityError) ||
613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	(channel == xmlParserValidityWarning))
614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlReportError(to, ctxt, str, NULL, NULL);
615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else if ((channel == (xmlGenericErrorFunc) fprintf) ||
616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project             (channel == xmlGenericErrorDefaultFunc))
617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlReportError(to, ctxt, str, channel, data);
618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    else
619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	channel(data, "%s", str);
620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlSimpleError:
624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @domain: where the error comes from
625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @code: the error code
626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the context node
627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra:  extra informations
628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an out of memory condition
630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlSimpleError(int domain, int code, xmlNodePtr node,
633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project                 const char *msg, const char *extra)
634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (code == XML_ERR_NO_MEMORY) {
637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (extra)
638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    NULL, NULL, 0, 0,
641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    "Memory allocation failed : %s\n", extra);
642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	else
643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			    NULL, NULL, 0, 0, "Memory allocation failed\n");
646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	__xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			code, XML_ERR_ERROR, NULL, 0, extra,
649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project			NULL, NULL, 0, 0, msg, extra);
650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserError:
654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format an error messages, gives file, line, position and
659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * extra parameters.
660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserError(void *ctx, const char *msg, ...)
663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr cur = NULL;
667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input = ctxt->input;
671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((input != NULL) && (input->filename == NULL) &&
672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->inputNr > 1)) {
673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    cur = input;
674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->inputTab[ctxt->inputNr - 2];
675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileInfo(input);
677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "error: ");
680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (cur != NULL) {
688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileInfo(cur);
689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext, "\n");
690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileContext(cur);
691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserWarning:
697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format a warning messages, gives file, line, position and
702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * extra parameters.
703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserWarning(void *ctx, const char *msg, ...)
706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr cur = NULL;
710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input = ctxt->input;
714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((input != NULL) && (input->filename == NULL) &&
715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    (ctxt->inputNr > 1)) {
716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    cur = input;
717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->inputTab[ctxt->inputNr - 2];
718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileInfo(input);
720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "warning: ");
723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (cur != NULL) {
731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileInfo(cur);
732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlGenericError(xmlGenericErrorContext, "\n");
733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    xmlParserPrintFileContext(cur);
734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 									*
740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 			Handling of validation errors			*
741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 									*
742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserValidityError:
746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format an validity error messages, gives file,
751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * line, position and extra parameters.
752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserValidityError(void *ctx, const char *msg, ...)
755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int len = xmlStrlen((const xmlChar *) msg);
760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    static int had_info = 0;
761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((len > 1) && (msg[len - 2] != ':')) {
763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if (ctxt != NULL) {
764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->input;
765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if ((input->filename == NULL) && (ctxt->inputNr > 1))
766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		input = ctxt->inputTab[ctxt->inputNr - 2];
767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    if (had_info == 0) {
769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project		xmlParserPrintFileInfo(input);
770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    }
771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	}
772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlGenericError(xmlGenericErrorContext, "validity error: ");
773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	had_info = 0;
774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    } else {
775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	had_info = 1;
776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (input != NULL)) {
784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserValidityWarning:
790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg:  the message to display/transmit
792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @...:  extra parameters for the message display
793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Display and format a validity warning messages, gives file, line,
795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * position and extra parameters.
796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid XMLCDECL
798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserValidityWarning(void *ctx, const char *msg, ...)
799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserInputPtr input = NULL;
802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char * str;
803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    int len = xmlStrlen((const xmlChar *) msg);
804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((ctxt != NULL) && (len != 0) && (msg[len - 1] != ':')) {
806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	input = ctxt->input;
807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	if ((input->filename == NULL) && (ctxt->inputNr > 1))
808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	    input = ctxt->inputTab[ctxt->inputNr - 2];
809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileInfo(input);
811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "validity warning: ");
814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    XML_GET_VAR_STR(msg, str);
815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlGenericError(xmlGenericErrorContext, "%s", str);
816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (str != NULL)
817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlFree(str);
818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt != NULL) {
820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project	xmlParserPrintFileContext(input);
821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    }
822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************
826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *			Extended Error Handling				*
828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *									*
829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/
830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGetLastError:
833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the last global error registered. This is per thread if compiled
835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with thread support.
836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns NULL if no error occured or a pointer to the error
838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrorPtr
840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGetLastError(void)
841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (xmlLastError.code == XML_ERR_OK)
843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (NULL);
844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (&xmlLastError);
845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlResetError:
849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @err: pointer to the error.
850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the error.
852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlResetError(xmlErrorPtr err)
855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err == NULL)
857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->code == XML_ERR_OK)
859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->message != NULL)
861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->message);
862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->file != NULL)
863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->file);
864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->str1 != NULL)
865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->str1);
866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->str2 != NULL)
867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->str2);
868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (err->str3 != NULL)
869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(err->str3);
870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    memset(err, 0, sizeof(xmlError));
871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    err->code = XML_ERR_OK;
872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlResetLastError:
876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the last global error registered. For parsing error
878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this does not change the well-formedness result.
879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlResetLastError(void)
882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (xmlLastError.code == XML_ERR_OK)
884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlResetError(&xmlLastError);
886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtGetLastError:
890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the last parsing error registered.
893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns NULL if no error occured or a pointer to the error
895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrorPtr
897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtGetLastError(void *ctx)
898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt == NULL)
902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (NULL);
903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->lastError.code == XML_ERR_OK)
904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return (NULL);
905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return (&ctxt->lastError);
906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtResetLastError:
910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx:  an XML parser context
911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the last global error registered. For parsing error
913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this does not change the well-formedness result.
914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid
916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtResetLastError(void *ctx)
917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{
918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt == NULL)
921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
922df143a5041f03a22808b59c76698770b74692815Selim Gurun    ctxt->errNo = XML_ERR_OK;
923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (ctxt->lastError.code == XML_ERR_OK)
924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return;
925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    xmlResetError(&ctxt->lastError);
926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**
929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCopyError:
930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @from:  a source error
931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @to:  a target error
932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Save the original error to the new place.
934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *
935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success and -1 in case of error.
936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */
937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint
938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCopyError(xmlErrorPtr from, xmlErrorPtr to) {
939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    char *message, *file, *str1, *str2, *str3;
940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if ((from == NULL) || (to == NULL))
942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        return(-1);
943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    message = (char *) xmlStrdup((xmlChar *) from->message);
945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    file = (char *) xmlStrdup ((xmlChar *) from->file);
946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str1 = (char *) xmlStrdup ((xmlChar *) from->str1);
947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str2 = (char *) xmlStrdup ((xmlChar *) from->str2);
948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    str3 = (char *) xmlStrdup ((xmlChar *) from->str3);
949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->message != NULL)
951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->message);
952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->file != NULL)
953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->file);
954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->str1 != NULL)
955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->str1);
956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->str2 != NULL)
957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->str2);
958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    if (to->str3 != NULL)
959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project        xmlFree(to->str3);
960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->domain = from->domain;
961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->code = from->code;
962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->level = from->level;
963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->line = from->line;
964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->node = from->node;
965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int1 = from->int1;
966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->int2 = from->int2;
967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->node = from->node;
968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->ctxt = from->ctxt;
969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->message = message;
970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->file = file;
971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->str1 = str1;
972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->str2 = str2;
973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    to->str3 = str3;
974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project    return 0;
976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}
977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project
978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_error
979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h"
980