diff -rupN libxml-ruby-0.9.8.org/ext/libxml/ruby_xml_error.c libxml-ruby-0.9.8/ext/libxml/ruby_xml_error.c --- libxml-ruby-0.9.8.org/ext/libxml/ruby_xml_error.c 2009-02-19 21:27:30.000000000 +0900 +++ libxml-ruby-0.9.8/ext/libxml/ruby_xml_error.c 2009-02-19 21:37:31.000000000 +0900 @@ -41,6 +41,8 @@ static void rxml_set_handler(VALUE self, #else rb_cvar_set(self, ERROR_HANDLER_ID, block); #endif + + rxml_error_init_error_handler(); } /* @@ -176,10 +178,16 @@ void rxml_raise(xmlErrorPtr xerror) rb_exc_raise(error); } +/* Register libxml error handler */ +void rxml_error_init_error_handler() +{ + xmlSetStructuredErrorFunc(NULL, structuredErrorFunc); +} + void ruby_init_xml_error() { /* Intercept libxml error handlers */ - xmlSetStructuredErrorFunc(NULL, structuredErrorFunc); + rxml_error_init_error_handler(); /* Error class */ eXMLError = rb_define_class_under(mXML, "Error", rb_eStandardError); diff -rupN libxml-ruby-0.9.8.org/lib/libxml/error.rb libxml-ruby-0.9.8/lib/libxml/error.rb --- libxml-ruby-0.9.8.org/lib/libxml/error.rb 2009-02-19 21:27:30.000000000 +0900 +++ libxml-ruby-0.9.8/lib/libxml/error.rb 2009-02-19 21:58:37.000000000 +0900 @@ -11,6 +11,45 @@ module LibXML QUIET_HANDLER = lambda do |error| end + # Register XML_FROM_xxx constants + FROM_CONSTANTS = [ + "NO_ERROR", + "PARSER", + "TREE", + "NAMESPACE", + "DTD", + "HTML", + "MEMORY", + "OUTPUT", + "IO", + "FTP", + "HTTP", + "XINCLUDE", + "XPATH", + "XPOINTER", + "REGEXP", + "DATATYPE", + "SCHEMASP", + "SCHEMASV", + "RELAXNGP", + "RELAXNGV", + "CATALOG", + "C14N", + "XSLT", + "VALID", + "CHECK", + "WRITER", + "MODULE", + "I18N", + "SCHEMATRONV", + ] + FROM_CONSTANTS.each do |name| + alias_name = "XML_FROM_" + name + if const_defined?(name) && !const_defined?(alias_name) + const_set(alias_name, const_get(name)) + end + end + def ==(other) eql?(other) end