diff --git a/audio/drivers/tinyalsa.c b/audio/drivers/tinyalsa.c index 074d91a97f..b0c6c7bacb 100644 --- a/audio/drivers/tinyalsa.c +++ b/audio/drivers/tinyalsa.c @@ -88,21 +88,25 @@ error: static ssize_t tinyalsa_write(void *data, const void *buf_, size_t size_) { - tinyalsa_t *tinyalsa = (tinyalsa_t*)data; - const uint8_t *buf = (const uint8_t*)buf_; - pcm_sframes_t written = 0, frames = 0; - pcm_sframes_t size = BYTES_TO_FRAMES(size_, tinyalsa->frame_bits); - size_t frames_size = tinyalsa->has_float ? sizeof(float) : sizeof(int16_t); + tinyalsa_t *tinyalsa = (tinyalsa_t*)data; + const uint8_t *buf = (const uint8_t*)buf_; + pcm_sframes_t written = 0, frames = 0; + pcm_sframes_t size = BYTES_TO_FRAMES(size_, tinyalsa->frame_bits); + size_t frames_size = tinyalsa->has_float ? sizeof(float) : sizeof(int16_t); - while (size) { - frames = pcm_writei(tinyalsa->pcm, buf, size); + while (size) + { + frames = pcm_writei(tinyalsa->pcm, buf, size); - written += frames; - buf += (frames << 1) * frames_size; - size -= frames; - } + if (frames < 0) + return -1; - return written; + written += frames; + buf += (frames << 1) * frames_size; + size -= frames; + } + + return written; }