- const void *data;
- unsigned length;
- unsigned pos;
-
- MemorySource(const void *d, unsigned l): data(d), length(l), pos(0) { }
-};
-
-size_t memory_read(void *ptr, size_t size, size_t nmemb, void *src)
-{
- MemorySource &memsrc = *reinterpret_cast<MemorySource *>(src);
- unsigned len = min<unsigned>(size*nmemb, memsrc.length-memsrc.pos);
- memcpy(ptr, reinterpret_cast<const char *>(memsrc.data)+memsrc.pos, len);
- memsrc.pos += len;
-
+ Msp::IO::Base *in = reinterpret_cast<Msp::IO::Base *>(src);
+ unsigned len = in->read(reinterpret_cast<char *>(ptr), size*nmemb);