mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2024-12-24 21:33:51 +03:00
94 lines
2.2 KiB
C
94 lines
2.2 KiB
C
/*
|
|
* 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");
|
|
}
|