From 9a819e5001567aafcc8d68f17d40075127bd6ea2 Mon Sep 17 00:00:00 2001 From: Christophe Jacquet Date: Sun, 22 Jun 2014 18:00:38 +0200 Subject: [PATCH] Safely exits when it is impossible to seek back in the audio file --- src/fm_mpx.c | 5 ++++- src/pi_fm_rds.c | 4 +++- src/rds_wav.c | 5 +++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/fm_mpx.c b/src/fm_mpx.c index 6a99551..3864557 100644 --- a/src/fm_mpx.c +++ b/src/fm_mpx.c @@ -176,7 +176,10 @@ int fm_mpx_get_samples(float *mpx_buffer) { return -1; } if(audio_len == 0) { - sf_seek(inf, 0, SEEK_SET); + if( sf_seek(inf, 0, SEEK_SET) < 0 ) { + fprintf(stderr, "Could not rewind in audio file, terminating\n"); + return -1; + } } else { break; } diff --git a/src/pi_fm_rds.c b/src/pi_fm_rds.c index a88cd1c..29653f1 100644 --- a/src/pi_fm_rds.c +++ b/src/pi_fm_rds.c @@ -483,7 +483,9 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, while (free_slots >= SUBSIZE) { // get more baseband samples if necessary if(data_len == 0) { - fm_mpx_get_samples(data); + if( fm_mpx_get_samples(data) < 0 ) { + terminate(0); + } data_len = DATA_SIZE; data_index = 0; } diff --git a/src/rds_wav.c b/src/rds_wav.c index ed08e76..878f0d8 100644 --- a/src/rds_wav.c +++ b/src/rds_wav.c @@ -26,6 +26,7 @@ #include #include #include +#include #include "rds.h" #include "fm_mpx.h" @@ -38,7 +39,7 @@ int main(int argc, char **argv) { if(argc < 4) { fprintf(stderr, "Error: missing argument.\n"); - fprintf(stderr, "Syntax: rds_wav \n"); + fprintf(stderr, "Syntax: rds_wav \n"); return EXIT_FAILURE; } @@ -77,7 +78,7 @@ int main(int argc, char **argv) { float mpx_buffer[LENGTH]; for(int j=0; j<40; j++) { - fm_mpx_get_samples(mpx_buffer); + if( fm_mpx_get_samples(mpx_buffer) < 0 ) break; // scale samples for(int i=0; i