error.c
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /*
  2.  * error.c: module displaying/handling XML parser errors
  3.  *
  4.  * See Copyright for the status of this software.
  5.  *
  6.  * Daniel Veillard <Daniel.Veillard@w3.org>
  7.  */
  8. #ifdef WIN32
  9. #include "win32config.h"
  10. #else
  11. #include "config.h"
  12. #endif
  13. #include <stdio.h>
  14. #include <stdarg.h>
  15. #include <libxml/parser.h>
  16. /**
  17.  * xmlParserPrintFileInfo:
  18.  * @input:  an xmlParserInputPtr input
  19.  * 
  20.  * Displays the associated file and line informations for the current input
  21.  */
  22. void
  23. xmlParserPrintFileInfo(xmlParserInputPtr input) {
  24.     if (input != NULL) {
  25. if (input->filename)
  26.     fprintf(stderr, "%s:%d: ", input->filename,
  27.     input->line);
  28. else
  29.     fprintf(stderr, "Entity: line %d: ", input->line);
  30.     }
  31. }
  32. /**
  33.  * xmlParserPrintFileContext:
  34.  * @input:  an xmlParserInputPtr input
  35.  * 
  36.  * Displays current context within the input content for error tracking
  37.  */
  38. void
  39. xmlParserPrintFileContext(xmlParserInputPtr input) {
  40.     const xmlChar *cur, *base;
  41.     int n;
  42.     if (input == NULL) return;
  43.     cur = input->cur;
  44.     base = input->base;
  45.     while ((cur > base) && ((*cur == 'n') || (*cur == 'r'))) {
  46. cur--;
  47.     }
  48.     n = 0;
  49.     while ((n++ < 80) && (cur > base) && (*cur != 'n') && (*cur != 'r'))
  50.         cur--;
  51.     if ((*cur == 'n') || (*cur == 'r')) cur++;
  52.     base = cur;
  53.     n = 0;
  54.     while ((*cur != 0) && (*cur != 'n') && (*cur != 'r') && (n < 79)) {
  55.         fprintf(stderr, "%c", (unsigned char) *cur++);
  56. n++;
  57.     }
  58.     fprintf(stderr, "n");
  59.     cur = input->cur;
  60.     while ((*cur == 'n') || (*cur == 'r'))
  61. cur--;
  62.     n = 0;
  63.     while ((cur != base) && (n++ < 80)) {
  64.         fprintf(stderr, " ");
  65.         base++;
  66.     }
  67.     fprintf(stderr,"^n");
  68. }
  69. /**
  70.  * xmlParserError:
  71.  * @ctx:  an XML parser context
  72.  * @msg:  the message to display/transmit
  73.  * @...:  extra parameters for the message display
  74.  * 
  75.  * Display and format an error messages, gives file, line, position and
  76.  * extra parameters.
  77.  */
  78. void
  79. xmlParserError(void *ctx, const char *msg, ...)
  80. {
  81.     xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
  82.     xmlParserInputPtr input;
  83.     xmlParserInputPtr cur = NULL;
  84.     va_list args;
  85.     input = ctxt->input;
  86.     if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
  87. cur = input;
  88.         input = ctxt->inputTab[ctxt->inputNr - 2];
  89.     }
  90.         
  91.     xmlParserPrintFileInfo(input);
  92.     fprintf(stderr, "error: ");
  93.     va_start(args, msg);
  94.     vfprintf(stderr, msg, args);
  95.     va_end(args);
  96.     xmlParserPrintFileContext(input);
  97.     if (cur != NULL) {
  98.         xmlParserPrintFileInfo(cur);
  99. fprintf(stderr, "n");
  100. xmlParserPrintFileContext(cur);
  101.     }
  102. }
  103. /**
  104.  * xmlParserWarning:
  105.  * @ctx:  an XML parser context
  106.  * @msg:  the message to display/transmit
  107.  * @...:  extra parameters for the message display
  108.  * 
  109.  * Display and format a warning messages, gives file, line, position and
  110.  * extra parameters.
  111.  */
  112. void
  113. xmlParserWarning(void *ctx, const char *msg, ...)
  114. {
  115.     xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
  116.     xmlParserInputPtr input;
  117.     xmlParserInputPtr cur = NULL;
  118.     va_list args;
  119.     input = ctxt->input;
  120.     if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
  121. cur = input;
  122.         input = ctxt->inputTab[ctxt->inputNr - 2];
  123.     }
  124.         
  125.     xmlParserPrintFileInfo(input);
  126.         
  127.     fprintf(stderr, "warning: ");
  128.     va_start(args, msg);
  129.     vfprintf(stderr, msg, args);
  130.     va_end(args);
  131.     xmlParserPrintFileContext(input);
  132.     if (cur != NULL) {
  133.         xmlParserPrintFileInfo(cur);
  134. fprintf(stderr, "n");
  135. xmlParserPrintFileContext(cur);
  136.     }
  137. }
  138. /**
  139.  * xmlParserValidityError:
  140.  * @ctx:  an XML parser context
  141.  * @msg:  the message to display/transmit
  142.  * @...:  extra parameters for the message display
  143.  * 
  144.  * Display and format an validity error messages, gives file,
  145.  * line, position and extra parameters.
  146.  */
  147. void
  148. xmlParserValidityError(void *ctx, const char *msg, ...)
  149. {
  150.     xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
  151.     xmlParserInputPtr input;
  152.     va_list args;
  153.     input = ctxt->input;
  154.     if ((input->filename == NULL) && (ctxt->inputNr > 1))
  155.         input = ctxt->inputTab[ctxt->inputNr - 2];
  156.         
  157.     xmlParserPrintFileInfo(input);
  158.     fprintf(stderr, "validity error: ");
  159.     va_start(args, msg);
  160.     vfprintf(stderr, msg, args);
  161.     va_end(args);
  162.     xmlParserPrintFileContext(input);
  163. }
  164. /**
  165.  * xmlParserValidityWarning:
  166.  * @ctx:  an XML parser context
  167.  * @msg:  the message to display/transmit
  168.  * @...:  extra parameters for the message display
  169.  * 
  170.  * Display and format a validity warning messages, gives file, line,
  171.  * position and extra parameters.
  172.  */
  173. void
  174. xmlParserValidityWarning(void *ctx, const char *msg, ...)
  175. {
  176.     xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
  177.     xmlParserInputPtr input;
  178.     va_list args;
  179.     input = ctxt->input;
  180.     if ((input->filename == NULL) && (ctxt->inputNr > 1))
  181.         input = ctxt->inputTab[ctxt->inputNr - 2];
  182.     xmlParserPrintFileInfo(input);
  183.         
  184.     fprintf(stderr, "validity warning: ");
  185.     va_start(args, msg);
  186.     vfprintf(stderr, msg, args);
  187.     va_end(args);
  188.     xmlParserPrintFileContext(input);
  189. }