blob: 4c4bac5b23ddce94f7ebfb3ffe0f075821cfbb95 [file] [log] [blame]
Daniel Veillard260a68f1998-08-13 03:39:55 +00001/*
2 * error.c: module displaying errors
3 */
4
5#include <stdio.h>
6#include <stdarg.h>
7#include "parser.h"
8
9/*
10 * Display and format error messages.
11 */
12void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...) {
13 const CHAR *cur, *base;
14 va_list args;
15 int n;
16
17 va_start(args, msg);
18 if (ctxt->input->filename)
19 fprintf(stderr, "%s:%d: ", ctxt->input->filename,
20 ctxt->input->line);
21 else
22 fprintf(stderr, "line %d: ", ctxt->input->line);
23
24 fprintf(stderr, "error: ");
25 vfprintf(stderr, msg, args);
26 va_end(ap);
27 cur = ctxt->input->cur;
28 base = ctxt->input->base;
29 while ((*cur == '\n') || (*cur == '\r')) {
30 cur--;
31 base--;
32 }
33 n = 0;
34 while ((n++ < 60) && (cur >= base) && (*cur != '\n') && (*cur != '\r'))
35 cur--;
36 if ((*cur == '\n') || (*cur == '\r')) cur++;
37 base = cur;
38 n = 0;
39 while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
40 fprintf(stderr, "%c", (unsigned char) *cur++);
41 n++;
42 }
43 fprintf(stderr, "\n");
44 cur = ctxt->input->cur;
45 while ((*cur == '\n') || (*cur == '\r'))
46 cur--;
47 n = 0;
48 while ((cur != base) && (n++ < 60)) {
49 fprintf(stderr, " ");
50 base++;
51 }
52 fprintf(stderr,"^\n");
53}
54
55/*
56 * Display and format error messages.
57 */
58void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...) {
59 const CHAR *cur, *base;
60 va_list args;
61 int n;
62
63 va_start(args, msg);
64 if (ctxt->input->filename)
65 fprintf(stderr, "%s:%d: ", ctxt->input->filename,
66 ctxt->input->line);
67 else
68 fprintf(stderr, "line %d: ", ctxt->input->line);
69
70 fprintf(stderr, "warning: ");
71 vfprintf(stderr, msg, args);
72 va_end(ap);
73 cur = ctxt->input->cur;
74 base = ctxt->input->base;
75 n = 0;
76 while ((n++ < 60) && (cur >= base) && (*cur != '\n') && (*cur != '\r'))
77 cur--;
78 if ((*cur != '\n') || (*cur != '\r')) cur++;
79 base = cur;
80 n = 0;
81 while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
82 fprintf(stderr, "%c", (unsigned char) *cur++);
83 n++;
84 }
85 fprintf(stderr, "\n");
86 cur = ctxt->input->cur;
87 n = 0;
88 while ((cur != base) && (n++ < 60)) {
89 fprintf(stderr, " ");
90 base++;
91 }
92 fprintf(stderr,"^\n");
93}