diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2020-10-14 22:15:32 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-10-16 14:26:37 -0700 |
commit | 1d6c1db4a5808da55b0b49f3d6460f3f10f5e917 (patch) | |
tree | c5ba434a26ad10b411fd2d1691cd3887f3c86d15 | |
parent | 0c769b04b72a1805e1ffa32b4fca5f59fc98431a (diff) | |
download | subsurface-1d6c1db4a5808da55b0b49f3d6460f3f10f5e917.tar.gz |
core: use case-insensitive comparison for device models
The code in core/libdivecomputer.c used string insensitive
comparison for device models, before being merged into core/device.c.
Let's reinstate that behavior, since it appears to be more logical.
On would assume that two different vendors will not use the same
model with different casing (and the same device-ids), so that
should be safe.
This uses strcoll to correctly sort unicode, which will hopefully
never be needed!
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | core/device.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/core/device.cpp b/core/device.cpp index 4bfdd3ea4..c35aa74e9 100644 --- a/core/device.cpp +++ b/core/device.cpp @@ -205,7 +205,12 @@ bool device::operator==(const device &a) const bool device::operator<(const device &a) const { - return std::tie(deviceId, model) < std::tie(a.deviceId, a.model); + if (deviceId != a.deviceId) + return deviceId < a.deviceId; + + // Use strcoll to compare model-strings, since these might be unicode + // and therefore locale dependent? Let's hope that not, but who knows? + return strcoll(model.c_str(), a.model.c_str()) < 0; } const struct device *get_device_for_dc(const struct device_table *table, const struct divecomputer *dc) |