avoid usage of goto`
This commit is contained in:
@@ -658,7 +658,7 @@ int32_t SystemBus_MakeResp(SYSBUS *instPtr)
|
||||
* @param InstPtr A double pointer to System Bus instance.
|
||||
* @param config A pointer to System Bus configurations.
|
||||
*
|
||||
* @return None.
|
||||
* @return Error code.
|
||||
*
|
||||
******************************************************************************/
|
||||
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
||||
@@ -670,7 +670,7 @@ int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
||||
(*instPtr) = malloc(sizeof(SYSBUS));
|
||||
if ((*instPtr) == NULL)
|
||||
{
|
||||
return FAILURE;
|
||||
return ENOMEM;
|
||||
}
|
||||
(*instPtr)->rxQueue = NULL;
|
||||
(*instPtr)->txQueue = NULL;
|
||||
@@ -684,29 +684,45 @@ int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
||||
Status = SysbusUart_Init(&((*instPtr)->uartInst), &uartConfig);
|
||||
if (Status != SUCCESS)
|
||||
{
|
||||
Status = ENOMEM;
|
||||
goto sysbus_init_error;
|
||||
SystemBus_Destroy(*instPtr);
|
||||
return ENOMEM;
|
||||
}
|
||||
if (CircQueueCreate(&((*instPtr)->txQueue), (*instPtr)->config.txQueueMax) == false)
|
||||
{
|
||||
Status = ENOMEM;
|
||||
goto sysbus_init_error;
|
||||
SystemBus_Destroy(*instPtr);
|
||||
return ENOMEM;
|
||||
}
|
||||
if (CircQueueCreate(&((*instPtr)->rxQueue), (*instPtr)->config.rxQueueMax) == false)
|
||||
{
|
||||
Status = ENOMEM;
|
||||
goto sysbus_init_error;
|
||||
SystemBus_Destroy(*instPtr);
|
||||
return ENOMEM;
|
||||
}
|
||||
(*instPtr)->isRxDone = false; // nothing received.
|
||||
(*instPtr)->isTxDone = true; // nothing to be sent.
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
sysbus_init_error:
|
||||
free((*instPtr)->uartInst);
|
||||
free((*instPtr)->txQueue);
|
||||
free((*instPtr)->rxQueue);
|
||||
free(*instPtr);
|
||||
return Status;
|
||||
|
||||
/*****************************************************************************/
|
||||
/**
|
||||
* @brief Destroy System Bus instance.
|
||||
*
|
||||
* @param InstPtr A pointer to System Bus instance.
|
||||
*
|
||||
* @return None.
|
||||
*
|
||||
******************************************************************************/
|
||||
void SystemBus_Destroy(SYSBUS *instPtr)
|
||||
{
|
||||
if (instPtr == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
free(instPtr->uartInst);
|
||||
free(instPtr->txQueue);
|
||||
free(instPtr->rxQueue);
|
||||
free(instPtr);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
@@ -748,19 +764,17 @@ int32_t SystemBus_RxIntrHandler(SYSBUS *instPtr)
|
||||
Status = SysbusUart_Recv(instPtr->uartInst, sysbusReq);
|
||||
if (Status != SUCCESS)
|
||||
{
|
||||
goto recv_error;
|
||||
free(sysbusReq);
|
||||
return Status;
|
||||
}
|
||||
if (CircQueuePush(instPtr->rxQueue, (void *)sysbusReq) == false)
|
||||
{
|
||||
DBG_ERROR("SystemBus::RX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
goto recv_error;
|
||||
free(sysbusReq);
|
||||
return EQUEUE;
|
||||
}
|
||||
instPtr->isRxDone = false; // another reception is undergoing.
|
||||
return SUCCESS;
|
||||
recv_error:
|
||||
free(sysbusReq);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/** @} SystemBus*/
|
||||
Reference in New Issue
Block a user