diff options
Diffstat (limited to 'src/3rdparty/wav/wav.c')
-rw-r--r-- | src/3rdparty/wav/wav.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/3rdparty/wav/wav.c b/src/3rdparty/wav/wav.c index af33946..6f9b2ab 100644 --- a/src/3rdparty/wav/wav.c +++ b/src/3rdparty/wav/wav.c @@ -29,9 +29,7 @@ next: return p + 8; } -int wav_read(wav_t *w, const void *mem, size_t len) { - char* data = (char*)malloc(len); - memcpy(data, mem, len); +int wav_read(wav_t *w, const void *data, size_t len) { int bitdepth, channels, samplerate, format; size_t sz; const char *p = (const char*)data; @@ -57,8 +55,11 @@ int wav_read(wav_t *w, const void *mem, size_t len) { /* Find data subchunk */ p = findSubChunk((const char*)data, len, "data", &sz); if (!p) return WAV_ENODATA; + /* copy p to new buffer */ + char* buffer = (char*)malloc(sz); + memmove(buffer, p, sz); /* Init wav_t struct */ - w->data = p; + w->data = buffer; w->samplerate = samplerate; w->channels = channels; w->length = (sz / (bitdepth / 8)) / channels; |