STATUS setPlatformCallbacks()

in src/source/CallbacksProvider.c [393:465]


STATUS setPlatformCallbacks(PClientCallbacks pClientCallbacks, PPlatformCallbacks pPlatformCallbacks)
{
    ENTERS();
    STATUS retStatus = STATUS_SUCCESS;
    PCallbacksProvider pCallbackProvider = (PCallbacksProvider) pClientCallbacks;

    CHK(pCallbackProvider != NULL && pPlatformCallbacks != NULL, STATUS_NULL_ARG);

    // Validate the version first
    CHK(pPlatformCallbacks->version <= PLATFORM_CALLBACKS_CURRENT_VERSION, STATUS_INVALID_PLATFORM_CALLBACKS_VERSION);

    // Struct-copy the values
    pCallbackProvider->platformCallbacks = *pPlatformCallbacks;

    // Set the aggregates
    if (pCallbackProvider->platformCallbacks.getCurrentTimeFn != NULL) {
        pCallbackProvider->clientCallbacks.getCurrentTimeFn = getCurrentTimeAggregate;
    }

    if (pCallbackProvider->platformCallbacks.getRandomNumberFn != NULL) {
        pCallbackProvider->clientCallbacks.getRandomNumberFn = getRandomNumberAggregate;
    }

    if (pCallbackProvider->platformCallbacks.createMutexFn != NULL) {
        pCallbackProvider->clientCallbacks.createMutexFn = createMutexAggregate;
    }

    if (pCallbackProvider->platformCallbacks.lockMutexFn != NULL) {
        pCallbackProvider->clientCallbacks.lockMutexFn = lockMutexAggregate;
    }

    if (pCallbackProvider->platformCallbacks.unlockMutexFn != NULL) {
        pCallbackProvider->clientCallbacks.unlockMutexFn = unlockMutexAggregate;
    }

    if (pCallbackProvider->platformCallbacks.tryLockMutexFn != NULL) {
        pCallbackProvider->clientCallbacks.tryLockMutexFn = tryLockMutexAggregate;
    }

    if (pCallbackProvider->platformCallbacks.freeMutexFn != NULL) {
        pCallbackProvider->clientCallbacks.freeMutexFn = freeMutexAggregate;
    }

    if (pCallbackProvider->platformCallbacks.createConditionVariableFn != NULL) {
        pCallbackProvider->clientCallbacks.createConditionVariableFn = createConditionVariableAggregate;
    }

    if (pCallbackProvider->platformCallbacks.signalConditionVariableFn != NULL) {
        pCallbackProvider->clientCallbacks.signalConditionVariableFn = signalConditionVariableAggregate;
    }

    if (pCallbackProvider->platformCallbacks.broadcastConditionVariableFn != NULL) {
        pCallbackProvider->clientCallbacks.broadcastConditionVariableFn = broadcastConditionVariableAggregate;
    }

    if (pCallbackProvider->platformCallbacks.waitConditionVariableFn != NULL) {
        pCallbackProvider->clientCallbacks.waitConditionVariableFn = waitConditionVariableAggregate;
    }

    if (pCallbackProvider->platformCallbacks.freeConditionVariableFn != NULL) {
        pCallbackProvider->clientCallbacks.freeConditionVariableFn = freeConditionVariableAggregate;
    }

    // Special handling for the logging function
    if (pCallbackProvider->platformCallbacks.logPrintFn != NULL) {
        pCallbackProvider->clientCallbacks.logPrintFn = pCallbackProvider->platformCallbacks.logPrintFn;
    }

CleanUp:

    LEAVES();
    return retStatus;
}