#ifdef ALLOC_PERF_OPT
void * OPJ_CALLCONV opj_malloc(size_t size);
#else
+/* prevent assertion on overflow for MSVC */
+#ifdef _MSC_VER
+#define opj_malloc(size) ((size_t)(size) >= (size_t)-0x100 ? NULL : malloc(size))
+#else
#define opj_malloc(size) malloc(size)
#endif
+#endif
/**
Allocate a memory block with elements initialized to 0
#ifdef ALLOC_PERF_OPT
void * OPJ_CALLCONV opj_calloc(size_t _NumOfElements, size_t _SizeOfElements);
#else
+/* prevent assertion on overflow for MSVC */
+#ifdef _MSC_VER
+#define opj_calloc(num, size) ((size_t)(num) != 0 && (size_t)(num) >= (size_t)-0x100 / (size_t)(size) ? NULL : calloc(num, size))
+#else
#define opj_calloc(num, size) calloc(num, size)
#endif
+#endif
/**
Allocate memory aligned to a 16 byte boundry
#ifdef ALLOC_PERF_OPT
void * OPJ_CALLCONV opj_realloc(void * m, size_t s);
#else
+/* prevent assertion on overflow for MSVC */
+#ifdef _MSC_VER
+#define opj_realloc(m, s) ((size_t)(s) >= (size_t)-0x100 ? NULL : realloc(m, s))
+#else
#define opj_realloc(m, s) realloc(m, s)
#endif
+#endif
/**
Deallocates or frees a memory block.