summaryrefslogtreecommitdiffstats
path: root/core/device.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-10-17 13:54:29 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-10-17 09:04:20 -0700
commit6b1be8c4f6aee3f7793198a9e34af8fefbc2f1cc (patch)
tree4ba8d347d689bcd17bce8961d8a0e091816e161b /core/device.cpp
parentc0467422888602b53d673d49a955d1d878cb24d5 (diff)
downloadsubsurface-6b1be8c4f6aee3f7793198a9e34af8fefbc2f1cc.tar.gz
devices: use case-insensitive comparison for model
Recently, the sorting of the devices was changed to be case-insensitive for models for consistency reasons. However, then the equality-comparison should also be case-insensitive. Break it out into its own function, to avoid that mistake in the future. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/device.cpp')
-rw-r--r--core/device.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/core/device.cpp b/core/device.cpp
index 1e8e0792c..48d66244f 100644
--- a/core/device.cpp
+++ b/core/device.cpp
@@ -203,6 +203,11 @@ bool device::operator==(const device &a) const
nickName == a.nickName;
}
+static bool same_device(const device &dev1, const device &dev2)
+{
+ return dev1.deviceId == dev2.deviceId && strcoll(dev1.model.c_str(), dev2.model.c_str()) == 0;
+}
+
bool device::operator<(const device &a) const
{
if (deviceId != a.deviceId)
@@ -216,8 +221,9 @@ bool device::operator<(const device &a) const
const struct device *get_device_for_dc(const struct device_table *table, const struct divecomputer *dc)
{
const std::vector<device> &dcs = table->devices;
- auto it = std::lower_bound(dcs.begin(), dcs.end(), device{dc->model, dc->deviceid, {}, {}, {}});
- return it != dcs.end() && it->model == dc->model && it->deviceId == dc->deviceid ? &*it : NULL;
+ device dev { dc->model, dc->deviceid, {}, {}, {} };
+ auto it = std::lower_bound(dcs.begin(), dcs.end(), dev);
+ return it != dcs.end() && same_device(*it, dev) ? &*it : NULL;
}
/*
@@ -263,8 +269,9 @@ static void addDC(std::vector<device> &dcs, const std::string &m, uint32_t d, co
{
if (m.empty() || d == 0)
return;
- auto it = std::lower_bound(dcs.begin(), dcs.end(), device{m, d, {}, {}, {}});
- if (it != dcs.end() && it->model == m && it->deviceId == d) {
+ device dev { m, d, {}, {}, {} };
+ auto it = std::lower_bound(dcs.begin(), dcs.end(), dev);
+ if (it != dcs.end() && same_device(*it, dev)) {
// debugging: show changes
if (verbose)
it->showchanges(n, s, f);