in src/mqtt_client.c [537:638]
static int cloneMqttOptions(MQTT_CLIENT* mqtt_client, const MQTT_CLIENT_OPTIONS* mqttOptions)
{
int result = 0;
char* temp_option;
if (mqttOptions->clientId != NULL)
{
if (mallocAndStrcpy_s(&temp_option, mqttOptions->clientId) != 0)
{
result = MU_FAILURE;
LogError("mallocAndStrcpy_s clientId");
}
else
{
if (mqtt_client->mqttOptions.clientId != NULL)
{
free(mqtt_client->mqttOptions.clientId);
}
mqtt_client->mqttOptions.clientId = temp_option;
}
}
if (result == 0 && mqttOptions->willTopic != NULL)
{
temp_option = NULL;
if (mallocAndStrcpy_s(&temp_option, mqttOptions->willTopic) != 0)
{
result = MU_FAILURE;
LogError("mallocAndStrcpy_s willTopic");
}
else
{
if (mqtt_client->mqttOptions.willTopic != NULL)
{
free(mqtt_client->mqttOptions.willTopic);
}
mqtt_client->mqttOptions.willTopic = temp_option;
}
}
if (result == 0 && mqttOptions->willMessage != NULL)
{
temp_option = NULL;
if (mallocAndStrcpy_s(&temp_option, mqttOptions->willMessage) != 0)
{
LogError("mallocAndStrcpy_s willMessage");
result = MU_FAILURE;
}
else
{
if (mqtt_client->mqttOptions.willMessage != NULL)
{
free(mqtt_client->mqttOptions.willMessage);
}
mqtt_client->mqttOptions.willMessage = temp_option;
}
}
if (result == 0 && mqttOptions->username != NULL)
{
temp_option = NULL;
if (mallocAndStrcpy_s(&temp_option, mqttOptions->username) != 0)
{
LogError("mallocAndStrcpy_s username");
result = MU_FAILURE;
}
else
{
if (mqtt_client->mqttOptions.username != NULL)
{
free(mqtt_client->mqttOptions.username);
}
mqtt_client->mqttOptions.username = temp_option;
}
}
if (result == 0 && mqttOptions->password != NULL)
{
temp_option = NULL;
if (mallocAndStrcpy_s(&temp_option, mqttOptions->password) != 0)
{
LogError("mallocAndStrcpy_s password");
result = MU_FAILURE;
}
else
{
if (mqtt_client->mqttOptions.password != NULL)
{
free(mqtt_client->mqttOptions.password);
}
mqtt_client->mqttOptions.password = temp_option;
}
}
if (result == 0)
{
mqtt_client->mqttOptions.keepAliveInterval = mqttOptions->keepAliveInterval;
mqtt_client->mqttOptions.messageRetain = mqttOptions->messageRetain;
mqtt_client->mqttOptions.useCleanSession = mqttOptions->useCleanSession;
mqtt_client->mqttOptions.qualityOfServiceValue = mqttOptions->qualityOfServiceValue;
}
else
{
clear_mqtt_options(mqtt_client);
}
return result;
}