Mercurial > pidgin
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 { |
