wavpack: read_bytes() should not return after partial reads

libwavpack expects the read_bytes() stream method to fill the whole
buffer, and fails badly when we return a partial read (i.e. not enough
data available yet).  This caused wavpack streams to break.
Re-implement the buffer filling loop.
This commit is contained in:
Max Kellermann 2008-11-05 07:24:57 +01:00
parent 010a27cd95
commit eedbd28ec9

View File

@ -348,7 +348,22 @@ static int32_t read_bytes(void *id, void *data, int32_t bcount)
--bcount;
++i;
}
return i + decoder_read(isp->decoder, isp->is, buf, bcount);
/* wavpack fails if we return a partial read, so we just wait
until the buffer is full */
while (bcount > 0) {
size_t nbytes = decoder_read(isp->decoder, isp->is,
buf, bcount);
if (nbytes == 0)
/* EOF, error or a decoder command */
break;
i += nbytes;
bcount -= nbytes;
buf += nbytes;
}
return i;
}
static uint32_t get_pos(void *id)