[cairo] Implementing cairo_read_func_t/cairo_write_func_t properly
bf at abenteuerland.at
Sat Jan 2 11:16:17 PST 2016
On Saturday 02 January 2016 15:05:04 Enrico Weigelt, metux IT consult wrote:
> On 02.01.2016 12:35, Behdad Esfahbod wrote:
> >> Actually, I really wonder what that stream API is really for.
> >> Why not just let everything operate on an fd or directly mmap()
> >> the whole file ?
> > A very simple reason is language binding, or in general, hooking up to
> > other IO libraries (gio, etc).
> hmm, what for, exactly ?
> The application has to provide its own implementation for the callback
> anyways, so why doesn't it just load/mmap the file as it is and call
> the cairo's image loader then ?
Memory mapping (mmap()) and streaming (independently if buffered or on a file
descriptor) are two completely different approaches.
Have a look at my code. It provides a cairo_...._mem() function which operates
on a memory buffer, i.e. you can pass a memory region. This may be where ever
in memory, hence, also a mmap()ed area.
To the functions cairo_..._stream() a callback function is passed. Thus it is
up to the caller if you implemented this with direct io on a file descriptor
(read()/write()) or with buffered io (fread()/fwrite()).
More information about the cairo