comparison libpurple/xmlnode.c @ 26686:17379effc417

Add xmlnode and bonjour structured error handlers. Various libraries may set global structured error handlers and libxml2 prefers those to a per-context normal error handler. This causes us to break badly. References #8830.
author Paul Aurich <paul@darkrain42.org>
date Sun, 26 Apr 2009 00:30:02 +0000
parents 38238d41923b
children 350f097019eb
comparison
equal deleted inserted replaced
26685:90d5e3b94a37 26686:17379effc417
643 va_start(args, msg); 643 va_start(args, msg);
644 vsnprintf(errmsg, sizeof(errmsg), msg, args); 644 vsnprintf(errmsg, sizeof(errmsg), msg, args);
645 va_end(args); 645 va_end(args);
646 646
647 purple_debug_error("xmlnode", "Error parsing xml file: %s", errmsg); 647 purple_debug_error("xmlnode", "Error parsing xml file: %s", errmsg);
648 }
649
650 static void
651 xmlnode_parser_structural_error_libxml(void *user_data, xmlErrorPtr error)
652 {
653 struct _xmlnode_parser_data *xpd = user_data;
654
655 if (error && (error->level == XML_ERR_ERROR ||
656 error->level == XML_ERR_FATAL)) {
657 xpd->error = TRUE;
658 purple_debug_error("xmlnode", "XML parser error for xmlnode %p: "
659 "Domain %i, code %i, level %i: %s",
660 user_data, error->domain, error->code, error->level,
661 error->message ? error->message : "(null)\n");
662 } else if (error)
663 purple_debug_warning("xmlnode", "XML parser error for xmlnode %p: "
664 "Domain %i, code %i, level %i: %s",
665 user_data, error->domain, error->code, error->level,
666 error->message ? error->message : "(null)\n");
667 else
668 purple_debug_warning("xmlnode", "XML parser error for xmlnode %p\n",
669 user_data);
648 } 670 }
649 671
650 static xmlSAXHandler xmlnode_parser_libxml = { 672 static xmlSAXHandler xmlnode_parser_libxml = {
651 NULL, /* internalSubset */ 673 NULL, /* internalSubset */
652 NULL, /* isStandalone */ 674 NULL, /* isStandalone */
677 NULL, /* externalSubset */ 699 NULL, /* externalSubset */
678 XML_SAX2_MAGIC, /* initialized */ 700 XML_SAX2_MAGIC, /* initialized */
679 NULL, /* _private */ 701 NULL, /* _private */
680 xmlnode_parser_element_start_libxml, /* startElementNs */ 702 xmlnode_parser_element_start_libxml, /* startElementNs */
681 xmlnode_parser_element_end_libxml, /* endElementNs */ 703 xmlnode_parser_element_end_libxml, /* endElementNs */
682 NULL, /* serror */ 704 xmlnode_parser_structural_error_libxml, /* serror */
683 }; 705 };
684 706
685 xmlnode * 707 xmlnode *
686 xmlnode_from_str(const char *str, gssize size) 708 xmlnode_from_str(const char *str, gssize size)
687 { 709 {