module Nokogiri::IoCallbacks
def ffi_io_native_reader(io)
def ffi_io_native_reader(io) if io.is_a?(StringIO) plain_old_reader(io) else lambda do |ctx, buffer, len| rcode = FFI::IO.native_read(io, buffer, len) (rcode < 0) ? 0 : rcode end end end
def plain_old_reader(io)
def plain_old_reader(io) lambda do |ctx, buffer, len| string = io.read(len) return 0 if string.nil? buffer.put_bytes(0, string, 0, string.length) string.length end end
def writer(io)
def writer(io) lambda do |context, buffer, len| io.write buffer len end end