[cairo] Implementing cairo_read_func_t/cairo_write_func_t properly

Bernhard Fischer 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 mailing list