diff options
Diffstat (limited to 'gr-blocks/lib')
-rw-r--r-- | gr-blocks/lib/wavfile.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/gr-blocks/lib/wavfile.cc b/gr-blocks/lib/wavfile.cc index 0a4336f443..865082e05f 100644 --- a/gr-blocks/lib/wavfile.cc +++ b/gr-blocks/lib/wavfile.cc @@ -138,10 +138,26 @@ namespace gr { } } - // data chunk + // find data chunk fresult = fread(str_buf, 1, 4, fp); - if(strncmp(str_buf, "data", 4)) { - return false; + // keep parsing chunk until we hit the data chunk + while(fresult != 4 || strncmp(str_buf, "data", 4)) + { + // all good? + if(fresult != 4 || ferror(fp) || feof(fp)) { + return false; + } + // get chunk body size and skip + fresult = fread(&chunk_size, 1, 4, fp); + if(fresult != 4 || ferror(fp) || feof(fp)) { + return false; + } + chunk_size = wav_to_host(chunk_size); + if(fseek(fp, chunk_size, SEEK_CUR) != 0) { + return false; + } + // read next chunk type + fresult = fread(str_buf, 1, 4, fp); } fresult = fread(&chunk_size, 1, 4, fp); |