Fix display of sensor units
An earlier change modified getSensorTypeStringFromPath() and
removed the comparison function for the sensor units map.
Because they are char* and the type string failed, the default
sort and find map functions don't work and sensor units appear
as unspecified.
This change fixes the type string and adds the char* comparison
function back in so find() can correctly find the sensor unit.
Tested: Ran the 'sensor list' command and verified that the units
are correctly displayed.
Change-Id: Iac29b763dfd899ced9cb8885ddfa0f2edb8c4d64
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
diff --git a/include/sdrutils.hpp b/include/sdrutils.hpp
index 8b93e9b..6510d6c 100644
--- a/include/sdrutils.hpp
+++ b/include/sdrutils.hpp
@@ -94,10 +94,10 @@
// get sensor type string from path, path is defined as
// /xyz/openbmc_project/sensors/<type>/label
size_t typeEnd = path.rfind("/");
- size_t typeStart = path.rfind("/", typeEnd - 1);
+ size_t typeStart = path.rfind("/", typeEnd - 1) + 1;
if (typeEnd != std::string::npos && typeStart != std::string::npos)
{
- return path.substr(typeStart + 1, typeEnd - typeStart);
+ return path.substr(typeStart, typeEnd - typeStart);
}
return path;
}
diff --git a/src/sensorcommands.cpp b/src/sensorcommands.cpp
index 3c1f050..a4fe05a 100644
--- a/src/sensorcommands.cpp
+++ b/src/sensorcommands.cpp
@@ -53,12 +53,20 @@
static SensorSubTree sensorTree;
static boost::container::flat_map<std::string, ManagedObjectType> SensorCache;
-const static boost::container::flat_map<const char *, SensorUnits> sensorUnits{
- {{"temperature", SensorUnits::degreesC},
- {"voltage", SensorUnits::volts},
- {"current", SensorUnits::amps},
- {"fan_tach", SensorUnits::rpm},
- {"power", SensorUnits::watts}}};
+// Specify the comparison required to sort and find char* map objects
+struct CmpStr
+{
+ bool operator()(const char *a, const char *b) const
+ {
+ return std::strcmp(a, b) < 0;
+ }
+};
+const static boost::container::flat_map<const char *, SensorUnits, CmpStr>
+ sensorUnits{{{"temperature", SensorUnits::degreesC},
+ {"voltage", SensorUnits::volts},
+ {"current", SensorUnits::amps},
+ {"fan_tach", SensorUnits::rpm},
+ {"power", SensorUnits::watts}}};
void registerSensorFunctions() __attribute__((constructor));
static sdbusplus::bus::bus dbus(ipmid_get_sd_bus_connection());