mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-11-10 04:59:42 +01:00
a926ce9851
This replaces all calls to SDL_free with a new macro, VVV_free, that nulls the pointer afterwards. This mitigates any use-after-frees and also completely eliminates double-frees. The same is done for any function to free specific objects such as SDL_FreeSurface, with the VVV_freefunc macro. No exceptions for any of these calls, even if the pointer is discarded or zeroed afterwards anyway. Better safe than sorry. This is a macro rather than a function that takes in a pointer-to-pointer because such a function would have type issues that require casting and that's just not safe. Even though SDL_free and other SDL functions already check for NULL, the macro has a NULL check for other functions that don't. For example, FAudioVoice_DestroyVoice does not check for NULL. FILESYSTEM_freeMemory has been axed in favor of VVV_free because it functionally does the same thing except for `unsigned char*` only.
19 lines
336 B
C
19 lines
336 B
C
#ifndef ALLOCGAME_H
|
|
#define ALLOCGAME_H
|
|
|
|
/* TODO: VVV_malloc, VVV_realloc, etc. */
|
|
|
|
#define VVV_freefunc(func, obj) \
|
|
do \
|
|
{ \
|
|
if (obj != NULL) \
|
|
{ \
|
|
func(obj); \
|
|
obj = NULL; \
|
|
} \
|
|
} \
|
|
while (0)
|
|
|
|
#define VVV_free(obj) VVV_freefunc(SDL_free, obj)
|
|
|
|
#endif /* ALLOCGAME_H */
|