dbus-sensors: utils: Utility to get device bus & addr from dev name.

This is applicable to all the services which rely on "bus-addr" fmt.
1. FanSensor
2. HwmonTempSensor
3. IntelCPUSensor
4. PSUSensor

In addition this would also fix Fansensor Daemon crashes due to
stoi() exceptions weren't caught earlier.

For example: In a FanSensor Daemon -
Device of f0103000.pwm-fan-controller would be classified as i2cfan
based on new way of defining fan type.
Hence when we parse string for bus-addr, bus=f0103000.pwm and
addr=fan-controller for which stoi() would crash.
This would be true for all non I2c devices defaulting to I2cFan type.

Solution is to use 'std::from_chars' which handles under/overflow
properly. Centralizing this now in Utils would also allow us to manage
this appropriatelty across various services.

Tested:
Tested sanity of all daemons in the system and they work as expected.

Change-Id: I546e967abae7c0fb9fca645867e3037046037647
Signed-off-by: Akshit Shah <shahakshit@google.com>
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index a85d13a..7cc758c 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -299,27 +299,10 @@
                 device = directory / "device";
                 deviceName = fs::canonical(device).stem();
             }
-            auto findHyphen = deviceName.find('-');
-            if (findHyphen == std::string::npos)
-            {
-                std::cerr << "found bad device " << deviceName << "\n";
-                continue;
-            }
-            std::string busStr = deviceName.substr(0, findHyphen);
-            std::string addrStr = deviceName.substr(findHyphen + 1);
 
-            uint64_t bus = 0;
-            uint64_t addr = 0;
-            std::from_chars_result res{};
-            res = std::from_chars(busStr.data(), busStr.data() + busStr.size(),
-                                  bus);
-            if (res.ec != std::errc{})
-            {
-                continue;
-            }
-            res = std::from_chars(addrStr.data(),
-                                  addrStr.data() + addrStr.size(), addr, 16);
-            if (res.ec != std::errc{})
+            size_t bus = 0;
+            size_t addr = 0;
+            if (!getDeviceBusAddr(deviceName, bus, addr))
             {
                 continue;
             }