in inc/c_util/tarray_ll.h [105:148]
static TARRAY_LL(T) TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(C)(uint32_t capacity, TARRAY_LL_CLEANUP_FUNCTION_TYPE_NAME(T) cleanup, void* cleanup_context) \
{ \
TARRAY_TYPEDEF_NAME(T)* result; \
if (capacity == 0) \
{ \
/* Codes_SRS_TARRAY_01_001: [ If capacity is 0, TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(T) shall fail and return NULL. ]*/ \
LogError("Invalid arguments: uint32_t capacity=%" PRIu32 "", capacity); \
result = NULL; \
} \
else \
{ \
/* Codes_SRS_TARRAY_01_002: [ TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(T) shall call THANDLE_MALLOC to allocate the result. ]*/ \
result = THANDLE_MALLOC(TARRAY_TYPEDEF_NAME(C))(TARRAY_LL_FREE_NAME(C)); \
if(result == NULL) \
{ \
/* Codes_SRS_TARRAY_01_005: [ If there are any failures then TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(T) shall fail and return NULL. ]*/ \
LogError("failure in " MU_TOSTRING(THANDLE_MALLOC) "(" MU_TOSTRING(TARRAY_TYPEDEF_NAME(T)) "=%zu)", sizeof(TARRAY_TYPEDEF_NAME(T))); \
/*return as is*/ \
} \
else \
{ \
/* Codes_SRS_TARRAY_01_003: [ TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(T) shall call malloc_2 to allocate capacity entries for result->arr. ]*/ \
result->arr = malloc_2(capacity,sizeof(T)); \
if(result->arr == NULL) \
{ \
/* Codes_SRS_TARRAY_01_005: [ If there are any failures then TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(T) shall fail and return NULL. ]*/ \
LogError("failure in malloc_2(capacity=%" PRIu32 ", sizeof(" MU_TOSTRING(T) ")=%zu)", \
capacity, sizeof(T)); \
} \
else \
{ \
result->cleanup = cleanup; \
result->cleanup_context = cleanup_context; \
result->capacity = capacity; \
/* Codes_SRS_TARRAY_01_004: [ TARRAY_LL_CREATE_WITH_CAPACITY_AND_CLEANUP_INTERNAL(T) shall succeed and return a non-NULL value. ]*/ \
goto allok; \
} \
THANDLE_FREE(TARRAY_TYPEDEF_NAME(C))(result); \
result = NULL; \
} \
} \
allok:; \
return result; \
}