static void EsifActMgr_DestroyEntry( EsifActMgrEntryPtr entryPtr ) { if (NULL == entryPtr) { goto exit; } EsifAct_DestroyAction(entryPtr->actPtr); EsifActMgr_UnloadAction(entryPtr); esif_ccb_free(entryPtr->libName); esif_ccb_free(entryPtr); exit: return; }
/* * FUNCTION DEFINITIONS */ eEsifError EsifAct_CreateAction( EsifActIfacePtr actIfacePtr, EsifActPtr *actPtr ) { eEsifError rc = ESIF_OK; EsifActPtr newActPtr = NULL; enum esif_action_type actionType; UInt16 intfcSize = 0; if ((NULL == actIfacePtr) || (NULL == actPtr)){ rc = ESIF_E_PARAMETER_IS_NULL; goto exit; } /* Check EsifActIface */ if (!EsifActIface_IsSupported(actIfacePtr)) { rc = ESIF_E_IFACE_NOT_SUPPORTED; goto exit; } intfcSize = EsifActIface_Sizeof(actIfacePtr->hdr.fIfaceVersion); if (intfcSize != actIfacePtr->hdr.fIfaceSize) { rc = ESIF_E_PARAMETER_IS_OUT_OF_BOUNDS; goto exit; } newActPtr = esif_ccb_malloc(sizeof(*newActPtr)); if (NULL == newActPtr) { rc = ESIF_E_NO_MEMORY; goto exit; } esif_ccb_memcpy(&newActPtr->iface, actIfacePtr, intfcSize); rc = EsifActIface_GetType(actIfacePtr, &actionType); if (rc != ESIF_OK) { goto exit; } newActPtr->type = actionType; newActPtr->refCount = 1; newActPtr->markedForDelete = ESIF_FALSE; esif_ccb_lock_init(&newActPtr->objLock); esif_ccb_event_init(&newActPtr->deleteEvent); rc = EsifAct_CallIfaceCreate(newActPtr); if (rc != ESIF_OK) { goto exit; } rc = EsifAct_RegisterEvents(newActPtr); if (rc != ESIF_OK) { goto exit; } ESIF_TRACE_DEBUG("\n" "Created new action:" " Name : %s\n" " Desc : %s\n" " Type : %d\n" " Version: %u\n", EsifAct_GetName(newActPtr), EsifAct_GetDesc(newActPtr), EsifAct_GetType(newActPtr), EsifAct_GetVersion(newActPtr)); *actPtr = newActPtr; exit: if (rc != ESIF_OK) { EsifAct_DestroyAction(newActPtr); } return rc; }