diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-05-06 14:08:17 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-05-06 14:15:59 -0700 |
commit | 0c836ebc47cab2f37274ae03ab2be6c7b2fd0456 (patch) | |
tree | 2c55ca0c5aa1bb6e9dcb6cc8bb920cb28c75b5cd | |
parent | 024420a60ddf7d18a6bd2ce4aad30344be0edbac (diff) | |
download | subsurface-0c836ebc47cab2f37274ae03ab2be6c7b2fd0456.tar.gz |
Simplify string comparison
This is based on Linus' idea on the mailing list.
Treat NULL strings and empty strings as identical.
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dive.h | 6 | ||||
-rw-r--r-- | equipment.c | 10 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 11 |
3 files changed, 12 insertions, 15 deletions
@@ -7,6 +7,7 @@ #include <math.h> #include <zip.h> #include <sqlite3.h> +#include <string.h> /* Windows has no MIN/MAX macros - so let's just roll our own */ #define MIN(x, y) ({ \ @@ -23,6 +24,11 @@ #define IS_FP_SAME(_a, _b) (fabs((_a) - (_b)) < 0.000001 * MAX(fabs(_a), fabs(_b))) +static inline int same_string(const char *a, const char *b) +{ + return !strcmp(a ? : "", b ? : ""); +} + #include <libxml/tree.h> #include <libxslt/transform.h> diff --git a/equipment.c b/equipment.c index e63a876d0..548f15b5e 100644 --- a/equipment.c +++ b/equipment.c @@ -71,14 +71,6 @@ bool cylinder_none(void *_data) return cylinder_nodata(cyl) && cylinder_nosamples(cyl); } -/* descriptions are equal if they are both NULL or both non-NULL - and the same text */ -static bool description_equal(const char *desc1, const char *desc2) -{ - return ((!desc1 && !desc2) || - (desc1 && desc2 && strcmp(desc1, desc2) == 0)); -} - bool weightsystem_none(void *_data) { weightsystem_t *ws = _data; @@ -98,7 +90,7 @@ bool no_weightsystems(weightsystem_t *ws) static bool one_weightsystem_equal(weightsystem_t *ws1, weightsystem_t *ws2) { return ws1->weight.grams == ws2->weight.grams && - description_equal(ws1->description, ws2->description); + same_string(ws1->description, ws2->description); } bool weightsystems_equal(weightsystem_t *ws1, weightsystem_t *ws2) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index ec4065d85..5bcc07cf9 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -856,12 +856,11 @@ void MainTab::rejectChanges() // this macro is rather fragile and is intended to be used as WHAT inside // an invocation of EDIT_SELECTED_DIVES(WHAT) -#define EDIT_TEXT(what, text) \ - if ((!mydive->what && !current_dive->what) || \ - (mydive->what && current_dive->what && strcmp(mydive->what, current_dive->what) == 0)) { \ - QByteArray textByteArray = text.toUtf8(); \ - free(mydive->what); \ - mydive->what = strdup(textByteArray.data()); \ +#define EDIT_TEXT(what, text) \ + if (same_string(mydive->what, current_dive->what)) { \ + QByteArray textByteArray = text.toUtf8(); \ + free(mydive->what); \ + mydive->what = strdup(textByteArray.data()); \ } #define EDIT_VALUE(what, value) \ |