-again:
- ret = ov_read(pod->vf, fn->buf + fn->loaded, fn->bufsize - fn->loaded,
- ENDIAN, BITS / 8, SIGN, NULL);
- if (ret == OV_HOLE || !ret) {
- return pod->converted;
+ while (!*fn->fc->input_eof && fn->loaded < fn->bufsize) {
+ int length = fn->bufsize - fn->loaded;
+ long read_ret = ov_read(pod->vf, fn->buf + fn->loaded, length,
+ ENDIAN, BITS / 8, SIGN, NULL);
+ if (read_ret == OV_HOLE || !read_ret)
+ return pod->converted;
+ if (read_ret < 0)
+ return -E_OGGDEC_BADLINK;
+ fn->loaded += read_ret;