summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorSigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>2022-01-19 02:16:09 +0000
committerSigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>2022-01-19 02:16:09 +0000
commitaa14ba62fd02ffd0e7053c23b2918e7aa46bcb86 (patch)
tree290090f980bf0501e08612610cba691c89c6504b /sys
parent6f9838a6a5b80e0253bdc8fb194ad6f15eb655f5 (diff)
flacdec: do not loop forever on write/decode errors
Diffstat (limited to 'sys')
-rw-r--r--sys/src/cmd/audio/flacdec/flacdec.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/src/cmd/audio/flacdec/flacdec.c b/sys/src/cmd/audio/flacdec/flacdec.c
index c9d11e0f4..fcdd2e57a 100644
--- a/sys/src/cmd/audio/flacdec/flacdec.c
+++ b/sys/src/cmd/audio/flacdec/flacdec.c
@@ -145,8 +145,8 @@ decoutput(FLAC__StreamDecoder *dec, FLAC__Frame *frame, FLAC__int32 *buffer[], v
}
}
n = b * chans * len;
- if(n > 0)
- write(ifd, buf, n);
+ if(n > 0 && write(ifd, buf, n) != n)
+ return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
}
@@ -191,7 +191,8 @@ int main(int argc, char *argv[])
if(seek > 0.0){
FLAC__uint64 srate;
do{
- FLAC__stream_decoder_process_single(dec);
+ if(!FLAC__stream_decoder_process_single(dec))
+ break;
srate = FLAC__stream_decoder_get_sample_rate(dec);
}while(srate == 0);
if(!FLAC__stream_decoder_seek_absolute(dec, srate*seek)){