[cairo] Implementing cairo_read_func_t/cairo_write_func_t properly
bf at abenteuerland.at
Fri Jan 1 01:32:59 PST 2016
On Thursday 31 December 2015 09:54:39 Lawrence D'Oliveiro wrote:
> On Wed, 30 Dec 2015 15:27:13 +0100, Bernhard Fischer wrote:
> > when I would return STATUS_READ_ERROR, then the calling function
> > cannot detect how many bytes then actually have been read except in
> > the case that I read 1 byte after the other.
> Does it matter? In any case, the file is clearly corrupted and the
> image decoding has failed.
> At least, that is my conclusion...
Yes, it matters!
cairo_..._stream() are stream reading functions. This is that it does not know
in advance how many bytes are available in the file.
The read_func_t is called with a buffer of a programmer-chosen length (from
within cairo_..._stream()), e.g. 10k. But if the file has just 9k, obviously
only 9k are read. Unfortunately, the programmer has no way to find that out.
The only way to circumvent that properly is to repeatedly call the read_func()
with just a single-byte buffer.
More information about the cairo