[cairo] Implementing cairo_read_func_t/cairo_write_func_t properly
Bill Spitzak
spitzak at gmail.com
Sat Jan 2 13:01:39 PST 2016
On 01/01/2016 01:42 AM, Lawrence D'Oliveiro wrote:
> On Fri, 01 Jan 2016 10:32:59 +0100, Bernhard Fischer wrote:
>
>> cairo_..._stream() are stream reading functions. This is that it does
>> not know in advance how many bytes are available in the file.
>
> That’s not how they work. Cairo uses them to read known file formats.
> If it doesn’t get the number of bytes it expects, then there is
> something wrong with the file.
No, he is right, this is a problem.
A lot of libraries that accept such read/write functions are assuming
they have to do buffering themselves, as the intention is for the
functions to be the system read/write which are only efficient for large
blocks.
At the point the library is calling the function to read, it is just
trying to refill it's input buffer. It will pass the size of that
buffer, but it wants to detect where the EOF is if it lands inside the
buffer.
I think the api has to be changed to return number of bytes read, and a
negative number for eof.
More information about the cairo
mailing list