summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/wavfile.cc
diff options
context:
space:
mode:
authorJohnathan Corgan <johnathan@corganlabs.com>2013-11-16 10:34:48 -0800
committerJohnathan Corgan <johnathan@corganlabs.com>2013-11-16 10:34:48 -0800
commitf0eebb1aeeae4fa6a6602ca19162e66aede48264 (patch)
tree111299eb72e9640fad3a848393e53d4019884f13 /gr-blocks/lib/wavfile.cc
parenteb5309f2663bd1dccf14a77b108ec0fe8780ac80 (diff)
parent04c3275e610f9ddd72d86378b86949b482f3accc (diff)
Merge branch 'maint'
Diffstat (limited to 'gr-blocks/lib/wavfile.cc')
-rw-r--r--gr-blocks/lib/wavfile.cc22
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);