fru_gen: reduce map in generated data
Eliminate one level of the generated "frus" map by creating
a structure for the lowest-level member.
This should reduce the impact of a gcc bug that consumes
excessive memory when compiling the generated map. Also
removed the runtime calculation of the 'delimiter' character
and instead generated it in the fru_gen python script.
Resolves openbmc/openbmc#1441.
Resolves openbmc/openbmc#1166.
Change-Id: Iafe049d034354d58b68d357b4f49fd5e21b2c8c7
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/writefrudata.cpp b/writefrudata.cpp
index 27ea6e2..97282ea 100644
--- a/writefrudata.cpp
+++ b/writefrudata.cpp
@@ -360,37 +360,13 @@
PropertyMap props;//store all the properties
for (auto& properties : interfaceList.second)
{
- std::string section, property, delimiter, value;
- for (auto& info : properties.second)
- {
- if (info.first == "IPMIFruSection")
- {
- section = std::move(info.second);
- }
- if (info.first == "IPMIFruProperty")
- {
- property = std::move(info.second);
- }
- if (info.first == "IPMIFruValueDelimiter")
- {
- //Read the delimeter as ascii value
- //convert it into char
- if( info.second.length() > 0 )
- {
- char dlm = ' ';
- rc = sscanf(info.second.c_str(),"%hhd",&dlm);
- if (rc > 0)
- {
- delimiter = std::string(1,dlm);
- }
- }
- }
+ std::string value;
+ decltype(auto) pdata = properties.second;
- }
-
- if (!section.empty() && !property.empty())
+ if (!pdata.section.empty() && !pdata.property.empty())
{
- value = getFRUValue(section, property, delimiter, fruData);
+ value = getFRUValue(pdata.section, pdata.property,
+ pdata.delimiter, fruData);
}
props.emplace(std::move(properties.first), std::move(value));
}