summaryrefslogtreecommitdiff
path: root/gr-blocks/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gr-blocks/lib')
-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);