    /*
     * call-seq:
     *  native_write(chunk, last_chunk)
     *
     * Write +chunk+ to PushParser. +last_chunk+ triggers the end_document handle
     */
    static VALUE native_write(VALUE self, VALUE _chunk, VALUE _last_chunk)
    {
      xmlParserCtxtPtr ctx;
      const char * chunk  = NULL;
      int size            = 0;

      Data_Get_Struct(self, xmlParserCtxt, ctx);

      if(Qnil != _chunk) {
        chunk = StringValuePtr(_chunk);
        size = (int)RSTRING_LEN(_chunk);
      }

      if(xmlParseChunk(ctx, chunk, size, Qtrue == _last_chunk ? 1 : 0)) {
        if (!(ctx->options & XML_PARSE_RECOVER)) {
          xmlErrorPtr e = xmlCtxtGetLastError(ctx);
          Nokogiri_error_raise(NULL, e);
        }
      }

      return self;
    }