diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2013-11-16 10:34:48 -0800 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2013-11-16 10:34:48 -0800 |
commit | f0eebb1aeeae4fa6a6602ca19162e66aede48264 (patch) | |
tree | 111299eb72e9640fad3a848393e53d4019884f13 /gr-blocks/lib/wavfile.cc | |
parent | eb5309f2663bd1dccf14a77b108ec0fe8780ac80 (diff) | |
parent | 04c3275e610f9ddd72d86378b86949b482f3accc (diff) |
Merge branch 'maint'
Diffstat (limited to 'gr-blocks/lib/wavfile.cc')
-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); |