blob: 4c4bac5b23ddce94f7ebfb3ffe0f075821cfbb95 [file] [log] [blame]
/*
* error.c: module displaying errors
*/
#include <stdio.h>
#include <stdarg.h>
#include "parser.h"
/*
* Display and format error messages.
*/
void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...) {
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(ap);
cur = ctxt->input->cur;
base = ctxt->input->base;
while ((*cur == '\n') || (*cur == '\r')) {
cur--;
base--;
}
n = 0;
while ((n++ < 60) && (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++ < 60)) {
fprintf(stderr, " ");
base++;
}
fprintf(stderr,"^\n");
}
/*
* Display and format error messages.
*/
void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...) {
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(ap);
cur = ctxt->input->cur;
base = ctxt->input->base;
n = 0;
while ((n++ < 60) && (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;
n = 0;
while ((cur != base) && (n++ < 60)) {
fprintf(stderr, " ");
base++;
}
fprintf(stderr,"^\n");
}