Commit ecb67a1e authored by Max Kellermann's avatar Max Kellermann

decoder/sndfile: use decoder_read_full()

Replaces the loop in sndfile_vio_read(), eliminating duplicate and fragile code.
parent 0ef843f1
......@@ -36,7 +36,11 @@ struct SndfileInputStream {
InputStream &is;
size_t Read(void *buffer, size_t size) {
return decoder_read(decoder, is, buffer, size);
/* libsndfile chokes on partial reads; therefore
always force full reads */
return decoder_read_full(decoder, is, buffer, size)
? size
: 0;
}
};
......@@ -69,21 +73,7 @@ sndfile_vio_read(void *ptr, sf_count_t count, void *user_data)
{
SndfileInputStream &sis = *(SndfileInputStream *)user_data;
sf_count_t total_bytes = 0;
/* this loop is necessary because libsndfile chokes on partial
reads */
do {
size_t nbytes = sis.Read((char *)ptr + total_bytes,
count - total_bytes);
if (nbytes == 0)
return -1;
total_bytes += nbytes;
} while (total_bytes < count);
return total_bytes;
return sis.Read(ptr, count);
}
static sf_count_t
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment