def fetch_data(index, size, offset = 0)
raise "Bad offset" unless offset <= 0
get_fulltext_IO do |fulltextIO|
get_sarray_IO do |sarrayIO|
base = index_to_offset(sarrayIO, index)
actual_offset = offset
newsize = size
if base + offset < 0
excess = (base + offset).abs
newsize = size - excess
actual_offset = offset + excess
end
str = get_string(sarrayIO, fulltextIO, index, newsize, offset)
from = (str.rindex("\0", -actual_offset) || -1) + 1
to = (str.index("\0", -actual_offset) || 0) - 1
str[from..to]
end
end
end