diff --git a/include/SDL_stdinc.h b/include/SDL_stdinc.h index 5183fd5fb..689f23efd 100644 --- a/include/SDL_stdinc.h +++ b/include/SDL_stdinc.h @@ -436,9 +436,9 @@ extern "C" { #define SDL_stack_free(data) SDL_free(data) #endif -extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); -extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); -extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern SDL_MALLOC DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern SDL_MALLOC SDL_ALLOC_SIZE2(1, 2) DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern SDL_ALLOC_SIZE(2) DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); extern DECLSPEC void SDLCALL SDL_free(void *mem); typedef void *(SDLCALL *SDL_malloc_func)(size_t size); @@ -576,7 +576,7 @@ extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); -extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern SDL_MALLOC DECLSPEC char *SDLCALL SDL_strdup(const char *str); extern DECLSPEC char *SDLCALL SDL_strrev(char *str); extern DECLSPEC char *SDLCALL SDL_strupr(char *str); extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); diff --git a/include/begin_code.h b/include/begin_code.h index 3aaf9dab6..bab69a145 100644 --- a/include/begin_code.h +++ b/include/begin_code.h @@ -174,3 +174,33 @@ #undef _HAS_FALLTHROUGH #endif /* C++17 or C2x */ #endif /* SDL_FALLTHROUGH not defined */ + +#ifndef SDL_MALLOC +#if defined(__GNUC__) +#define SDL_MALLOC __attribute__((malloc)) +#elif defined(_MSC_VER) +#define SDL_MALLOC __declspec(allocator) __desclspec(restrict) +#else +#define SDL_MALLOC +#endif +#endif /* SDL_MALLOC not defined */ + +#ifndef SDL_ALLOC_SIZE +#if defined(__GNUC__) +#define SDL_ALLOC_SIZE(p) __attribute__((alloc_size(p))) +#elif defined(_MSC_VER) +#define SDL_ALLOC_SIZE(p) +#else +#define SDL_ALLOC_SIZE(p) +#endif +#endif /* SDL_ALLOC_SIZE not defined */ + +#ifndef SDL_ALLOC_SIZE2 +#if defined(__GNUC__) +#define SDL_ALLOC_SIZE2(p1, p2) __attribute__((alloc_size(p1, p2))) +#elif defined(_MSC_VER) +#define SDL_ALLOC_SIZE2(p1, p2) +#else +#define SDL_ALLOC_SIZE2(p1, p2) +#endif +#endif /* SDL_ALLOC_SIZE2 not defined */