/* * error.c: module displaying errors */ #include #include #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"); }