SC_ATOMIC_EXTERN(unsigned int, engine_stage);
-/* Use this only if you want to debug memory allocation and free()
- * It will log a lot of lines more, so think that is a performance killer */
-
-/* Uncomment this if you want to print memory allocations and free's() */
-//#define DBG_MEM_ALLOC
-
-#ifdef DBG_MEM_ALLOC
-
-/* Uncomment this if you want to print mallocs at the startup (recommended) */
-#define DBG_MEM_ALLOC_SKIP_STARTUP
-
-#define SCMalloc(a) ({ \
- void *ptrmem = NULL; \
- extern size_t global_mem; \
- extern uint8_t print_mem_flag; \
- \
- ptrmem = malloc((a)); \
- if (ptrmem == NULL && (a) > 0) { \
- SCLogError(SC_ERR_MEM_ALLOC, "SCMalloc failed: %s, while trying " \
- "to allocate %"PRIuMAX" bytes", strerror(errno), (uintmax_t)(a)); \
- if (SC_ATOMIC_GET(engine_stage) == SURICATA_INIT) {\
- SCLogError(SC_ERR_FATAL, "Out of memory. The engine cannot be initialized. Exiting..."); \
- exit(EXIT_FAILURE); \
- } \
- } \
- \
- global_mem += (a); \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCMalloc return at %p of size %"PRIuMAX, \
- ptrmem, (uintmax_t)(a)); \
- } \
- (void*)ptrmem; \
-})
-
-#define SCRealloc(x, a) ({ \
- void *ptrmem = NULL; \
- extern size_t global_mem; \
- extern uint8_t print_mem_flag; \
- \
- ptrmem = realloc((x), (a)); \
- if (ptrmem == NULL && (a) > 0) { \
- SCLogError(SC_ERR_MEM_ALLOC, "SCRealloc failed: %s, while trying " \
- "to allocate %"PRIuMAX" bytes", strerror(errno), (uintmax_t)(a)); \
- if (SC_ATOMIC_GET(engine_stage) == SURICATA_INIT) {\
- SCLogError(SC_ERR_FATAL, "Out of memory. The engine cannot be initialized. Exiting..."); \
- exit(EXIT_FAILURE); \
- } \
- } \
- \
- global_mem += (a); \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCRealloc return at %p (old:%p) of size %"PRIuMAX, \
- ptrmem, (x), (uintmax_t)(a)); \
- } \
- (void*)ptrmem; \
-})
-
-#define SCCalloc(nm, a) ({ \
- void *ptrmem = NULL; \
- extern size_t global_mem; \
- extern uint8_t print_mem_flag; \
- \
- ptrmem = calloc((nm), (a)); \
- if (ptrmem == NULL && (a) > 0) { \
- SCLogError(SC_ERR_MEM_ALLOC, "SCCalloc failed: %s, while trying " \
- "to allocate %"PRIuMAX" bytes", strerror(errno), (uintmax_t)a); \
- if (SC_ATOMIC_GET(engine_stage) == SURICATA_INIT) {\
- SCLogError(SC_ERR_FATAL, "Out of memory. The engine cannot be initialized. Exiting..."); \
- exit(EXIT_FAILURE); \
- } \
- } \
- \
- global_mem += (a)*(nm); \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCCalloc return at %p of size %"PRIuMAX" (nm) %"PRIuMAX, \
- ptrmem, (uintmax_t)(a), (uintmax_t)(nm)); \
- } \
- (void*)ptrmem; \
-})
-
-#define SCStrdup(a) ({ \
- char *ptrmem = NULL; \
- extern size_t global_mem; \
- extern uint8_t print_mem_flag; \
- size_t _len = strlen((a)); \
- \
- ptrmem = strdup((a)); \
- if (ptrmem == NULL) { \
- SCLogError(SC_ERR_MEM_ALLOC, "SCStrdup failed: %s, while trying " \
- "to allocate %"PRIuMAX" bytes", strerror(errno), (uintmax_t)_len); \
- if (SC_ATOMIC_GET(engine_stage) == SURICATA_INIT) {\
- SCLogError(SC_ERR_FATAL, "Out of memory. The engine cannot be initialized. Exiting..."); \
- exit(EXIT_FAILURE); \
- } \
- } \
- \
- global_mem += _len; \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCStrdup return at %p of size %"PRIuMAX, \
- ptrmem, (uintmax_t)_len); \
- } \
- (void*)ptrmem; \
-})
-
-#ifndef HAVE_STRNDUP
-#define SCStrndup(a, b) ({ \
- char *ptrmem = NULL; \
- extern size_t global_mem; \
- extern uint8_t print_mem_flag; \
- size_t _len = (b); \
- \
- size_t _scstrndup_len = _len + 1; \
- ptrmem = (char *)malloc(_scstrndup_len); \
- if (ptrmem == NULL) { \
- SCLogError(SC_ERR_MEM_ALLOC, "SCStrndup failed: %s, while trying " \
- "to allocate %"PRIuMAX" bytes", strerror(errno), (uintmax_t)_scstrndup_len); \
- if (SC_ATOMIC_GET(engine_stage) == SURICATA_INIT) {\
- SCLogError(SC_ERR_FATAL, "Out of memory. The engine cannot be initialized. Exiting..."); \
- exit(EXIT_FAILURE); \
- } \
- } else { \
- strlcpy(ptrmem, (a), _scstrndup_len); \
- *(ptrmem + _len) = '\0'; \
- } \
- \
- global_mem += _scstrndup_len; \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCStrndup return at %p of size %"PRIuMAX, \
- ptrmem, (uintmax_t)_scstrndup_len); \
- } \
- (void*)ptrmem; \
-})
-#else /* HAVE_STRNDUP */
-#define SCStrndup(a, b) ({ \
- char *ptrmem = NULL; \
- extern size_t global_mem; \
- extern uint8_t print_mem_flag; \
- size_t _len = (b); \
- \
- ptrmem = strndup((a), _len); \
- if (ptrmem == NULL) { \
- SCLogError(SC_ERR_MEM_ALLOC, "SCStrndup failed: %s, while trying " \
- "to allocate %"PRIuMAX" bytes", strerror(errno), (uintmax_t)_len); \
- if (SC_ATOMIC_GET(engine_stage) == SURICATA_INIT) {\
- SCLogError(SC_ERR_FATAL, "Out of memory. The engine cannot be initialized. Exiting..."); \
- exit(EXIT_FAILURE); \
- } \
- } \
- \
- global_mem += _len; \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCStrndup return at %p of size %"PRIuMAX, \
- ptrmem, (uintmax_t)_len); \
- } \
- (void*)ptrmem; \
-})
-#endif
-
-#define SCFree(a) ({ \
- extern uint8_t print_mem_flag; \
- if (print_mem_flag == 1) { \
- SCLogInfo("SCFree at %p", (a)); \
- } \
- free((a)); \
-})
-
-#else /* !DBG_MEM_ALLOC */
-
#define SCMalloc(a) ({ \
void *ptrmem = NULL; \
\
#endif /* __WIN32 */
-#endif /* DBG_MEM_ALLOC */
-
#endif /* CPPCHECK */
#endif /* __UTIL_MEM_H__ */