- FILE *f = datasource;
- return fread(buf, size, nmemb, f);
+ struct ogg_datasource *ods = datasource;
+ size_t copy = PARA_MIN(ods->numbytes - ods->fpos, size * nmemb),
+ ret = copy / size;
+ if (!ret)
+ return 0;
+ memcpy(buf, ods->map + ods->fpos, copy);
+// PARA_INFO_LOG("size: %zd, nmemb: %zd, ret: %zd\n", size, nmemb, ret);
+ ods->fpos += ret * size;
+ return ret;