From 478b4194aec25c7b92538ccf0b2a67a5debed38a Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Sun, 11 Apr 2021 13:55:56 +0300 Subject: [PATCH] sdlmixer: fix sound loading (but sdlmixer still emits broken sound) --- src/sdlmixer/sound.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/sdlmixer/sound.c b/src/sdlmixer/sound.c index 593f138..c4b9cd7 100644 --- a/src/sdlmixer/sound.c +++ b/src/sdlmixer/sound.c @@ -31,11 +31,11 @@ #pragma pack(1) typedef struct dmi { - Uint32 len; // length [bytes] - Uint32 rate; // freq [Hz] - Uint32 lstart; // loop start offset [bytes] - Uint32 llen; // loop length [bytes] - Uint8 data[]; // sound data + word len; // length [bytes] + word rate; // freq [Hz] + word lstart; // loop start offset [bytes] + word llen; // loop length [bytes] + byte data[]; // sound data } dmi; #pragma pack() @@ -209,18 +209,18 @@ snd_t *S_get (int id) { handle = M_lock(id); if (handle != NULL) { void *data = handle; - dword len = F_getreslen(id); - dword rate = 11025; - dword lstart = 0; - dword llen = 0; + word len = F_getreslen(id); + word rate = 11025; + word lstart = 0; + word llen = 0; int sign = 0; - if (len > 16) { + if (len > 8) { dmi *hdr = handle; - dword hdr_len = int2host(hdr->len); - dword hdr_rate = int2host(hdr->rate); - dword hdr_lstart = int2host(hdr->lstart); - dword hdr_llen = int2host(hdr->llen); - if (hdr_len <= len - 8 && hdr_lstart + hdr_llen <= len - 16) { + word hdr_len = short2host(hdr->len); + word hdr_rate = short2host(hdr->rate); + word hdr_lstart = short2host(hdr->lstart); + word hdr_llen = short2host(hdr->llen); + if (hdr_len <= len - 4 && hdr_lstart + hdr_llen <= len - 8) { data = hdr->data; len = hdr_len; rate = hdr_rate; -- 2.29.2