mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
41 lines
922 B
C
41 lines
922 B
C
#pragma once
|
|
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include "common/attributes.h"
|
|
|
|
#if FF_HAVE_MALLOC_USABLE_SIZE || FF_HAVE_MSVC_MSIZE
|
|
#if __has_include(<malloc.h>)
|
|
#include <malloc.h>
|
|
#else
|
|
#include <malloc_np.h> // For DragonFly BSD
|
|
#endif
|
|
#elif FF_HAVE_MALLOC_SIZE
|
|
#include <malloc/malloc.h>
|
|
#endif
|
|
|
|
FF_A_ALWAYS_INLINE FF_A_NONNULL(1)
|
|
static inline void ffWrapFree(const void* pPtr) {
|
|
assert(pPtr);
|
|
if (*(void**) pPtr) {
|
|
free(*(void**) pPtr);
|
|
}
|
|
}
|
|
|
|
#define FF_AUTO_FREE FF_A_CLEANUP(ffWrapFree)
|
|
|
|
// ptr MUST be a malloc'ed pointer
|
|
static inline size_t ffMallocUsableSize(const void* ptr) {
|
|
assert(ptr);
|
|
#if FF_HAVE_MALLOC_USABLE_SIZE
|
|
return malloc_usable_size((void*) ptr);
|
|
#elif FF_HAVE_MALLOC_SIZE
|
|
return malloc_size((void*) ptr);
|
|
#elif FF_HAVE_MSVC_MSIZE
|
|
return _msize((void*) ptr);
|
|
#else
|
|
(void) ptr;
|
|
return 0; // Not supported
|
|
#endif
|
|
}
|