--- a/src/audio/SDL_wave.c Tue Jan 24 06:36:43 2006 +0000
+++ b/src/audio/SDL_wave.c Tue Jan 24 07:20:18 2006 +0000
@@ -418,8 +418,9 @@
/* WAV magic header */
Uint32 RIFFchunk;
- Uint32 wavelen;
+ Uint32 wavelen = 0;
Uint32 WAVEmagic;
+ Uint32 headerDiff = 0;
/* FMT chunk */
WaveFMT *format = NULL;
@@ -446,6 +447,7 @@
was_error = 1;
goto done;
}
+ headerDiff += sizeof(Uint32); // for WAVE
/* Read the audio data format chunk */
chunk.data = NULL;
@@ -458,6 +460,8 @@
was_error = 1;
goto done;
}
+ // 2 Uint32's for chunk header+len, plus the lenread
+ headerDiff += lenread + 2 * sizeof(Uint32);
} while ( (chunk.magic == FACT) || (chunk.magic == LIST) );
/* Decode the audio data format */
@@ -535,7 +539,9 @@
}
*audio_len = lenread;
*audio_buf = chunk.data;
+ if(chunk.magic != DATA) headerDiff += lenread + 2 * sizeof(Uint32);
} while ( chunk.magic != DATA );
+ headerDiff += 2 * sizeof(Uint32); // for the data chunk and len
if ( MS_ADPCM_encoded ) {
if ( MS_ADPCM_decode(audio_buf, audio_len) < 0 ) {
@@ -561,6 +567,10 @@
if ( freesrc && src ) {
SDL_RWclose(src);
}
+ else {
+ // seek to the end of the file (given by the RIFF chunk)
+ SDL_RWseek(src, wavelen - chunk.length - headerDiff, SEEK_CUR);
+ }
if ( was_error ) {
spec = NULL;
}