lib/rnp/input.rb in rnp-1.0.4 vs lib/rnp/input.rb in rnp-1.0.5
- old
+ new
@@ -7,10 +7,11 @@
require 'ffi'
require 'rnp/error'
require 'rnp/ffi/librnp'
require 'rnp/utils'
+require 'rnp/misc'
class Rnp
# Class used to feed data into RNP.
#
# @note When dealing with very large data sources, prefer {from_path} which
@@ -72,19 +73,38 @@
def self.from_io(io)
from_callback(io.method(:read))
end
# @api private
- READER = lambda do |reader, _ctx, buf, buf_len|
- begin
- data = reader.call(buf_len)
- return 0 unless data
- raise Rnp::Error, 'Read exceeded buffer size' if data.size > buf_len
- buf.write_bytes(data)
- return data.size
- rescue
- puts $ERROR_INFO
- return -1
+ if Rnp.has?("input-reader-cb-no-ssize_t")
+ READER = lambda do |reader, _ctx, buf, buf_len, nread|
+ begin
+ data = reader.call(buf_len)
+ datasz = 0
+ if !data.nil?
+ datasz = data.size unless data.nil?
+ raise Rnp::Error, 'Read exceeded buffer size' if datasz > buf_len
+ buf.write_bytes(data) unless data.nil?
+ end
+ nread.write(:size_t, datasz)
+ return true
+ rescue
+ puts $ERROR_INFO
+ return false
+ end
+ end
+ else
+ READER = lambda do |reader, _ctx, buf, buf_len|
+ begin
+ data = reader.call(buf_len)
+ return 0 unless data
+ raise Rnp::Error, 'Read exceeded buffer size' if data.size > buf_len
+ buf.write_bytes(data)
+ return data.size
+ rescue
+ puts $ERROR_INFO
+ return -1
+ end
end
end
# @api private
def self.from_callback(reader)