UMOCKCALLRECORDER_HANDLE umockcallrecorder_create()

in src/umockcallrecorder.c [97:147]


UMOCKCALLRECORDER_HANDLE umockcallrecorder_create(UMOCK_C_LOCK_FACTORY_CREATE_LOCK_FUNC lock_factory_create_lock, void* lock_factory_create_lock_params)
{
    UMOCKCALLRECORDER_HANDLE result;

    /* Codes_SRS_UMOCKCALLRECORDER_01_095: [ lock_factory_create_lock may be NULL. ]*/
    /* Codes_SRS_UMOCKCALLRECORDER_01_001: [ umockcallrecorder_create shall create a new instance of a call recorder and return a non-NULL handle to it on success. ]*/
    result = umockalloc_malloc(sizeof(UMOCKCALLRECORDER));
    if (result == NULL)
    {
        /* Codes_SRS_UMOCKCALLRECORDER_01_002: [ If any error occurs, umockcallrecorder_create shall return NULL. ]*/
        UMOCK_LOG("umockalloc_malloc(%zu) failed", sizeof(UMOCKCALLRECORDER));
    }
    else
    {
        /* Codes_SRS_UMOCKCALLRECORDER_01_097: [ If lock_factory_create_lock is not NULL, umockcallrecorder_create shall call lock_factory_create_lock to create the lock used when working with the stored calls. ]*/
        if (
            (lock_factory_create_lock != NULL) && 
            ((result->lock = lock_factory_create_lock(lock_factory_create_lock_params)) == NULL)
            )
        {
            /* Tests_SRS_UMOCKCALLRECORDER_01_002: [ If any error occurs, umockcallrecorder_create shall return NULL. ]*/
            UMOCK_LOG("lock_factory_create_lock failed");
        }
        else
        {
            if (lock_factory_create_lock == NULL)
            {
                result->lock = NULL;
            }

            result->expected_call_count = 0;
            result->expected_calls = NULL;
            result->expected_calls_string = NULL;
            result->actual_call_count = 0;
            result->actual_calls = NULL;
            result->actual_calls_string = NULL;

            /* Codes_SRS_UMOCKCALLRECORDER_01_096: [ lock_factory_create_lock shall be saved for later use. ]*/
            result->lock_factory_create_lock = lock_factory_create_lock;
            result->lock_factory_create_lock_params = lock_factory_create_lock_params;

            goto all_ok;
        }

        umockalloc_free(result);
        result = NULL;
    }

all_ok:
    return result;
}