When choosing a new sound the wave form of the old one was free'ed, but
because built-in sounds are not really malloc'ed, this led to a crash.
struct stat st;\r
FILE *f;\r
\r
struct stat st;\r
FILE *f;\r
\r
- if (ms->data) free(ms->data);\r
+ if (ms->data && ms->flag) free(ms->data);\r
ms->data = NULL;\r
\r
switch (ms->name[0]) {\r
ms->data = NULL;\r
\r
switch (ms->name[0]) {\r
HANDLE h = FindResource(hInst, ms->name + 1, "WAVE");\r
if (h == NULL) break;\r
ms->data = (void *)LoadResource(hInst, h);\r
HANDLE h = FindResource(hInst, ms->name + 1, "WAVE");\r
if (h == NULL) break;\r
ms->data = (void *)LoadResource(hInst, h);\r
+ ms->flag = 0; // not maloced, so cannot be freed!\r
if (h == NULL) break;\r
ok = TRUE;\r
}\r
if (h == NULL) break;\r
ok = TRUE;\r
}\r
if (f == NULL) break;\r
if (fstat(fileno(f), &st) < 0) break;\r
ms->data = malloc(st.st_size);\r
if (f == NULL) break;\r
if (fstat(fileno(f), &st) < 0) break;\r
ms->data = malloc(st.st_size);\r
if (fread(ms->data, st.st_size, 1, f) < 1) break;\r
fclose(f);\r
ok = TRUE;\r
if (fread(ms->data, st.st_size, 1, f) < 1) break;\r
fclose(f);\r
ok = TRUE;\r
typedef struct {\r
char* name;\r
void* data;\r
typedef struct {\r
char* name;\r
void* data;\r
+ int flag; // [HGM] needed to indicate if data was malloc'ed or not\r
} MySound;\r
\r
typedef struct {\r
} MySound;\r
\r
typedef struct {\r