shithub: riscv

Download patch

ref: c7565b51b831e55ddbd4d7ea83f8a3730e60b77b
parent: 0d29a5d81f8c2e45f94aa214d47a568a741547f4
parent: 94ba3db59132e8375f757d8ea6082099d2564911
author: cinap_lenrek <[email protected]>
date: Mon Jun 20 19:11:27 EDT 2016

merge

--- a/sys/src/cmd/audio/flacdec/flacdec.c
+++ b/sys/src/cmd/audio/flacdec/flacdec.c
@@ -7,6 +7,15 @@
 static int ifd = -1;
 static int sts;
 
+static void
+flushout(void)
+{
+	if(ifd >= 0){
+		close(ifd);
+		wait(&sts);
+	}
+}
+
 static FLAC__StreamDecoderReadStatus
 decinput(FLAC__StreamDecoder *dec, FLAC__byte buffer[], size_t *bytes, void *client_data)
 {
@@ -44,10 +53,7 @@
 		bits = frame->header.bits_per_sample;
 		sprintf(fmt, "s%dr%dc%d", bits, rate, chans);
 
-		if(ifd >= 0){
-			close(ifd);
-			wait(&sts);
-		}
+		flushout();
 		if(pipe(pfd) < 0){
 			fprintf(stderr, "Error creating pipe\n");
 			exit(1);
@@ -67,6 +73,7 @@
 		}
 		close(pfd[1]);
 		ifd = pfd[0];
+		atexit(flushout);
 	}
 	len = frame->header.blocksize;
 	b = (bits+7)/8;
@@ -109,6 +116,8 @@
 static void
 decerror(FLAC__StreamDecoder *dec, FLAC__StreamDecoderErrorStatus status, void *client_data)
 {
+	fprintf(stderr, "decode error: %s (%d)\n", FLAC__StreamDecoderErrorStatusString[status], status);
+	exit(1);
 }
 
 int main(int argc, char *argv[])
@@ -120,11 +129,5 @@
 	FLAC__stream_decoder_init_stream(dec, decinput, NULL, NULL, NULL, NULL, decoutput, NULL, decerror, NULL);
 	FLAC__stream_decoder_process_until_end_of_stream(dec);
 	FLAC__stream_decoder_finish(dec);
-
-	if(ifd >= 0){
-		close(ifd);
-		wait(&sts);
-	}
-
 	return 0;
 }