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;
}