    /*
     * call-seq:
     *   read
     *
     * Move the Reader forward through the XML document.
     */
    static VALUE read_more(VALUE self)
    {
      xmlTextReaderPtr reader;
      Data_Get_Struct(self, xmlTextReader, reader);

      VALUE error_list = rb_funcall(self, rb_intern("errors"), 0);

      xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
      int ret = xmlTextReaderRead(reader);
      xmlSetStructuredErrorFunc(NULL, NULL);

      if(ret == 1) return self;
      if(ret == 0) return Qnil;

      xmlErrorPtr error = xmlGetLastError();
      if(error)
        rb_funcall(rb_mKernel, rb_intern("raise"), 1,
            Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error)
        );
      else
        rb_raise(rb_eRuntimeError, "Error pulling: %d", ret);

      return Qnil;
    }