use gcc malloc attribute for low level allocation functions, prevents gcc from checking if resulting pointers alias existing pointers, also use sentinel attribute for uiButGetStrInfo so incorrect usage gives a warning.
This commit is contained in:
@@ -98,6 +98,7 @@ extern "C" {
|
||||
* newly allocated block. */
|
||||
void *MEM_dupallocN(const void *vmemh)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
#endif
|
||||
;
|
||||
@@ -109,6 +110,7 @@ extern "C" {
|
||||
* over from existing memory. */
|
||||
void *MEM_reallocN_id(void *vmemh, size_t len, const char *str)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((alloc_size(2)))
|
||||
#endif
|
||||
@@ -119,6 +121,7 @@ extern "C" {
|
||||
*/
|
||||
void *MEM_recallocN_id(void *vmemh, size_t len, const char *str)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((alloc_size(2)))
|
||||
#endif
|
||||
@@ -133,6 +136,7 @@ extern "C" {
|
||||
* pointer to it is stored ! */
|
||||
void *MEM_callocN(size_t len, const char *str)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(2)))
|
||||
__attribute__((alloc_size(1)))
|
||||
@@ -145,6 +149,7 @@ extern "C" {
|
||||
* */
|
||||
void *MEM_mallocN(size_t len, const char *str)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(2)))
|
||||
__attribute__((alloc_size(1)))
|
||||
@@ -157,6 +162,7 @@ extern "C" {
|
||||
* */
|
||||
void *MEM_mapallocN(size_t len, const char *str)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(2)))
|
||||
__attribute__((alloc_size(1)))
|
||||
|
@@ -55,6 +55,7 @@ typedef struct MemArena MemArena;
|
||||
|
||||
struct MemArena *BLI_memarena_new(const int bufsize, const char *name)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(2)))
|
||||
#endif
|
||||
@@ -85,6 +86,7 @@ __attribute__((nonnull(1)))
|
||||
|
||||
void *BLI_memarena_alloc(struct MemArena *ma, int size)
|
||||
#if MEM_GNU_ATTRIBUTES
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(1)))
|
||||
__attribute__((alloc_size(2)))
|
||||
|
@@ -50,17 +50,20 @@ typedef struct BLI_mempool BLI_mempool;
|
||||
|
||||
BLI_mempool *BLI_mempool_create(int esize, int totelem, int pchunk, int flag)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
#endif
|
||||
;
|
||||
void *BLI_mempool_alloc(BLI_mempool *pool)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(1)))
|
||||
#endif
|
||||
;
|
||||
void *BLI_mempool_calloc(BLI_mempool *pool)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(1)))
|
||||
#endif
|
||||
@@ -94,6 +97,7 @@ __attribute__((nonnull(1, 2)))
|
||||
|
||||
void **BLI_mempool_as_tableN(BLI_mempool *pool, const char *allocstr)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(1, 2)))
|
||||
#endif
|
||||
@@ -107,6 +111,7 @@ __attribute__((nonnull(1, 2)))
|
||||
|
||||
void *BLI_mempool_as_arrayN(BLI_mempool *pool, const char *allocstr)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull(1, 2)))
|
||||
#endif
|
||||
|
@@ -40,6 +40,7 @@ extern "C" {
|
||||
|
||||
char *BLI_strdupn(const char *str, const size_t len)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull))
|
||||
#endif
|
||||
@@ -47,6 +48,7 @@ __attribute__((nonnull))
|
||||
|
||||
char *BLI_strdup(const char *str)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull))
|
||||
#endif
|
||||
@@ -54,6 +56,7 @@ __attribute__((nonnull))
|
||||
|
||||
char *BLI_strdupcat(const char *__restrict str1, const char *__restrict str2)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull))
|
||||
#endif
|
||||
@@ -81,6 +84,7 @@ __attribute__((nonnull))
|
||||
|
||||
char *BLI_str_quoted_substrN(const char *__restrict str, const char *__restrict prefix)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull))
|
||||
#endif
|
||||
@@ -88,6 +92,7 @@ __attribute__((nonnull))
|
||||
|
||||
char *BLI_replacestrN(const char *__restrict str, const char *__restrict substr_old, const char *__restrict substr_new)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull))
|
||||
#endif
|
||||
@@ -108,6 +113,7 @@ __attribute__ ((format(printf, 3, 0)))
|
||||
|
||||
char *BLI_sprintfN(const char *__restrict format, ...)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((malloc))
|
||||
__attribute__ ((format(printf, 1, 2)))
|
||||
__attribute__((warn_unused_result))
|
||||
__attribute__((nonnull))
|
||||
@@ -183,4 +189,4 @@ __attribute__((nonnull))
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /* __BLI_STRING_H__ */
|
||||
|
@@ -550,7 +550,11 @@ typedef struct uiStringInfo {
|
||||
/* Note: Expects pointers to uiStringInfo structs as parameters.
|
||||
* Will fill them with translated strings, when possible.
|
||||
* Strings in uiStringInfo must be MEM_freeN'ed by caller. */
|
||||
void uiButGetStrInfo(struct bContext *C, uiBut *but, ...);
|
||||
void uiButGetStrInfo(struct bContext *C, uiBut *but, ...)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((sentinel))
|
||||
#endif
|
||||
;
|
||||
|
||||
/* Edit i18n stuff. */
|
||||
/* Name of the main py op from i18n addon. */
|
||||
|
Reference in New Issue
Block a user