void DNAT_delete_rule_internal ( DNAT_PARM_PTR dparm_ptr /* [IN] */ ) { /* Body */ NAT_CFG_STRUCT_PTR nat_cfg_ptr = RTCS_getcfg(NAT); DNAT_ELEMENT_STRUCT_PTR element_ptr; uint32_t priority = dparm_ptr->RULE.PRIORITY; if (nat_cfg_ptr == NULL) { RTCSCMD_complete(dparm_ptr, RTCSERR_NAT_NOT_INITIALIZED); return; } element_ptr = (DNAT_ELEMENT_STRUCT_PTR) _queue_head(&nat_cfg_ptr->RULE_QUEUE); while (element_ptr != NULL) { if (element_ptr->RULE.PRIORITY == priority) { _queue_unlink(&nat_cfg_ptr->RULE_QUEUE, &element_ptr->ELEMENT); _mem_free((void *)element_ptr); RTCSCMD_complete(dparm_ptr, RTCS_OK); return; } element_ptr = (DNAT_ELEMENT_STRUCT_PTR) _queue_next(&nat_cfg_ptr->RULE_QUEUE, &element_ptr->ELEMENT); } RTCSCMD_complete(dparm_ptr, RTCSERR_NAT_INVALID_RULE); } /* Endbody */
_mqx_uint _io_pcb_destroy_pool ( /* The PCB pool to destroy */ _io_pcb_pool_id pool ) { /* Body */ KERNEL_DATA_STRUCT_PTR kernel_data; IO_PCB_POOL_STRUCT_PTR pool_ptr = IO_PCB_GET_POOL_PTR(pool); _mqx_uint result; #if MQX_CHECK_VALIDITY if (pool_ptr->VALID != IO_PCB_VALID) { return(IO_PCB_POOL_INVALID); }/* Endif */ #endif pool_ptr->VALID = 0; result = _partition_destroy(pool_ptr->PARTITION); if (result != MQX_OK ) { return(result); }/* Endif */ _lwsem_destroy(&pool_ptr->PCB_LWSEM); _GET_KERNEL_DATA(kernel_data); _queue_unlink((QUEUE_STRUCT_PTR)(&kernel_data->IO_PCB_POOLS), &pool_ptr->QUEUE); return(_mem_free(pool_ptr)); } /* Endbody */
void MFS_Free_handle ( MFS_DRIVE_STRUCT_PTR drive_ptr, /*[IN] the drive on which to operate */ MFS_HANDLE_PTR handle_ptr /*[IN] handle to be released */ ) { if ( handle_ptr != NULL ) { /* Unlink handle from HANDLE_LIST */ _queue_unlink( &drive_ptr->HANDLE_LIST, (QUEUE_ELEMENT_STRUCT_PTR) handle_ptr); /* clear out the handle and add to the freelist */ handle_ptr->VALID = ~handle_ptr->VALID; _partition_free(handle_ptr); } }