in src/common/commonutils/ConfigUtils.c [169:270]
int LoadReportedFromJsonConfig(const char* jsonString, ReportedProperty** reportedProperties, OsConfigLogHandle log)
{
JSON_Value* rootValue = NULL;
JSON_Object* rootObject = NULL;
JSON_Object* itemObject = NULL;
JSON_Array* reportedArray = NULL;
const char* componentName = NULL;
const char* propertyName = NULL;
size_t numReported = 0;
size_t bufferSize = 0;
size_t i = 0;
int numReportedProperties = 0;
if (NULL == reportedProperties)
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: called with an invalid argument, no properties to report");
return 0;
}
FREE_MEMORY(*reportedProperties);
if (NULL != jsonString)
{
if (NULL != (rootValue = json_parse_string(jsonString)))
{
if (NULL != (rootObject = json_value_get_object(rootValue)))
{
reportedArray = json_object_get_array(rootObject, REPORTED_NAME);
if (NULL != reportedArray)
{
numReported = json_array_get_count(reportedArray);
OsConfigLogInfo(log, "LoadReportedFromJsonConfig: found %d %s entries in configuration", (int)numReported, REPORTED_NAME);
if (numReported > 0)
{
bufferSize = numReported * sizeof(ReportedProperty);
*reportedProperties = (ReportedProperty*)malloc(bufferSize);
if (NULL != *reportedProperties)
{
memset(*reportedProperties, 0, bufferSize);
numReportedProperties = (int)numReported;
for (i = 0; i < numReported; i++)
{
itemObject = json_array_get_object(reportedArray, i);
if (NULL != itemObject)
{
componentName = json_object_get_string(itemObject, REPORTED_COMPONENT_NAME);
propertyName = json_object_get_string(itemObject, REPORTED_SETTING_NAME);
if ((NULL != componentName) && (NULL != propertyName))
{
strncpy((*reportedProperties)[i].componentName, componentName, ARRAY_SIZE((*reportedProperties)[i].componentName) - 1);
strncpy((*reportedProperties)[i].propertyName, propertyName, ARRAY_SIZE((*reportedProperties)[i].propertyName) - 1);
OsConfigLogInfo(log, "LoadReportedFromJsonConfig: found report property candidate at position %d of %d: %s.%s", (int)(i + 1),
numReportedProperties, (*reportedProperties)[i].componentName, (*reportedProperties)[i].propertyName);
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: %s or %s missing at position %d of %d, no property to report",
REPORTED_COMPONENT_NAME, REPORTED_SETTING_NAME, (int)(i + 1), (int)numReported);
}
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: json_array_get_object failed at position %d of %d, no reported property",
(int)(i + 1), (int)numReported);
}
}
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: out of memory, cannot allocate %d bytes for %d reported properties",
(int)bufferSize, (int)numReported);
}
}
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: no valid %s array in configuration, no properties to report", REPORTED_NAME);
}
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: json_value_get_object(root) failed, no properties to report");
}
json_value_free(rootValue);
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: json_parse_string failed, no properties to report");
}
}
else
{
OsConfigLogError(log, "LoadReportedFromJsonConfig: no configuration data, no properties to report");
}
return numReportedProperties;
}