mirror of
https://github.com/darlinghq/darling-libxml2.git
synced 2024-12-02 17:26:24 +00:00
121 lines
3.0 KiB
C
121 lines
3.0 KiB
C
/*
|
|
* error.c: module displaying/handling XML parser errors
|
|
*
|
|
* See Copyright for the status of this software.
|
|
*
|
|
* Daniel Veillard <Daniel.Veillard@w3.org>
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include "parser.h"
|
|
|
|
/**
|
|
* xmlParserError:
|
|
* @ctx: an XML parser context
|
|
* @msg: the message to display/transmit
|
|
* @...: extra parameters for the message display
|
|
*
|
|
* Display and format an error messages, gives file, line, position and
|
|
* extra parameters.
|
|
*/
|
|
void
|
|
xmlParserError(void *ctx, const char *msg, ...)
|
|
{
|
|
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
|
const CHAR *cur, *base;
|
|
va_list args;
|
|
int n;
|
|
|
|
va_start(args, msg);
|
|
if (ctxt->input->filename)
|
|
fprintf(stderr, "%s:%d: ", ctxt->input->filename,
|
|
ctxt->input->line);
|
|
else
|
|
fprintf(stderr, "line %d: ", ctxt->input->line);
|
|
|
|
fprintf(stderr, "error: ");
|
|
vfprintf(stderr, msg, args);
|
|
va_end(args);
|
|
cur = ctxt->input->cur;
|
|
base = ctxt->input->base;
|
|
while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
|
|
cur--;
|
|
}
|
|
n = 0;
|
|
while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
|
|
cur--;
|
|
if ((*cur == '\n') || (*cur == '\r')) cur++;
|
|
base = cur;
|
|
n = 0;
|
|
while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
|
|
fprintf(stderr, "%c", (unsigned char) *cur++);
|
|
n++;
|
|
}
|
|
fprintf(stderr, "\n");
|
|
cur = ctxt->input->cur;
|
|
while ((*cur == '\n') || (*cur == '\r'))
|
|
cur--;
|
|
n = 0;
|
|
while ((cur != base) && (n++ < 80)) {
|
|
fprintf(stderr, " ");
|
|
base++;
|
|
}
|
|
fprintf(stderr,"^\n");
|
|
}
|
|
|
|
/**
|
|
* xmlParserWarning:
|
|
* @ctx: an XML parser context
|
|
* @msg: the message to display/transmit
|
|
* @...: extra parameters for the message display
|
|
*
|
|
* Display and format a warning messages, gives file, line, position and
|
|
* extra parameters.
|
|
*/
|
|
void
|
|
xmlParserWarning(void *ctx, const char *msg, ...)
|
|
{
|
|
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
|
const CHAR *cur, *base;
|
|
va_list args;
|
|
int n;
|
|
|
|
va_start(args, msg);
|
|
if (ctxt->input->filename)
|
|
fprintf(stderr, "%s:%d: ", ctxt->input->filename,
|
|
ctxt->input->line);
|
|
else
|
|
fprintf(stderr, "line %d: ", ctxt->input->line);
|
|
|
|
fprintf(stderr, "warning: ");
|
|
vfprintf(stderr, msg, args);
|
|
va_end(args);
|
|
cur = ctxt->input->cur;
|
|
base = ctxt->input->base;
|
|
while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
|
|
cur--;
|
|
}
|
|
n = 0;
|
|
while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
|
|
cur--;
|
|
if ((*cur == '\n') || (*cur == '\r')) cur++;
|
|
base = cur;
|
|
n = 0;
|
|
while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
|
|
fprintf(stderr, "%c", (unsigned char) *cur++);
|
|
n++;
|
|
}
|
|
fprintf(stderr, "\n");
|
|
cur = ctxt->input->cur;
|
|
while ((*cur == '\n') || (*cur == '\r'))
|
|
cur--;
|
|
n = 0;
|
|
while ((cur != base) && (n++ < 80)) {
|
|
fprintf(stderr, " ");
|
|
base++;
|
|
}
|
|
fprintf(stderr,"^\n");
|
|
}
|
|
|