aboutsummaryrefslogtreecommitdiff
path: root/src/3rdparty/wav/wav.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/wav/wav.c')
-rw-r--r--src/3rdparty/wav/wav.c9
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;