return OC_STACK_OK;
}
- OCRepPayload **responsePayload[len];
-
+ OCRepPayload **responsePayload = NULL;
size_t dimensions[MAX_REP_ARRAY_DEPTH];
- OCRepPayloadGetPropObjectArray(payload, TABLE, responsePayload, dimensions);
-
- if (NULL == *responsePayload)
+ OCRepPayloadGetPropObjectArray(payload, TABLE, &responsePayload, dimensions);
+ if (NULL == responsePayload)
{
OIC_LOG(DEBUG, TAG, "RMPParsePayload OUT");
return OC_STACK_OK;
if (NULL == *gatewayTable)
{
OIC_LOG(DEBUG, TAG, "Gateway table create failed");
- return OC_STACK_ERROR;
+ goto error_exit;
}
+ size_t resPayloadSize = calcDimTotal(dimensions);
for (int i = 0; i < len; i++)
{
RTMGatewayEntry_t *entry = (RTMGatewayEntry_t *)OICCalloc(1, sizeof(RTMGatewayEntry_t));
-
if (NULL == entry)
{
OIC_LOG(DEBUG, TAG, "RTMGatewayEntry_t Calloc failed");
- return OC_STACK_ERROR;
+ goto error_exit;
}
// Filling new Entry
entry->destination = (RTMGatewayId_t*)OICCalloc(1, sizeof(RTMGatewayId_t));
{
OIC_LOG(DEBUG, TAG, "Destination Calloc failed");
OICFree(entry);
- return OC_STACK_ERROR;
+ goto error_exit;
}
entry->nextHop = (RTMGatewayId_t*)OICCalloc(1, sizeof(RTMGatewayId_t));
if (NULL == entry->nextHop)
OIC_LOG(DEBUG, TAG, "nextHop Calloc failed");
OICFree(entry->destination);
OICFree(entry);
- return OC_STACK_ERROR;
+ goto error_exit;
}
entry->nextHop->gatewayId = *gatewayId;
int64_t gatewayBuf;
int64_t routeCost;
- OCRepPayloadGetPropInt(*((*responsePayload) + i), GATEWAY, &gatewayBuf);
- OCRepPayloadGetPropInt(*((*responsePayload) + i), ROUTE_COST, &routeCost);
+ OCRepPayloadGetPropInt(responsePayload[i], GATEWAY, &gatewayBuf);
+ OCRepPayloadGetPropInt(responsePayload[i], ROUTE_COST, &routeCost);
entry->destination->gatewayId = gatewayBuf;
entry->routeCost = routeCost;
u_linklist_add(*gatewayTable, (void *)entry);
}
+
+ for (size_t k = 0; k < resPayloadSize; k++)
+ {
+ OCRepPayloadDestroy(responsePayload[k]);
+ }
+ OICFree(responsePayload);
+
OIC_LOG(DEBUG, TAG, "RMPParsePayload OUT");
return OC_STACK_OK;
+
+error_exit:
+ for (size_t k = 0; k < resPayloadSize; k++)
+ {
+ OCRepPayloadDestroy(responsePayload[k]);
+ }
+ OICFree(responsePayload);
+ return OC_STACK_ERROR;
}
void RMPFreePayload(OCRepPayload *payload)