1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-11-10 04:59:42 +01:00
VVVVVV/desktop_version/src/Alloc.h
Misa a926ce9851 Replace all free calls with VVV_free[func]
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.
2022-11-30 22:50:08 -08:00

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 */