Re: Implementing cairo_read_func_t/cairo_write_func_t properly
Bill Spitzak <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
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. -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo