summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2014-05-06 14:08:17 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-05-06 14:15:59 -0700
commit0c836ebc47cab2f37274ae03ab2be6c7b2fd0456 (patch)
tree2c55ca0c5aa1bb6e9dcb6cc8bb920cb28c75b5cd
parent024420a60ddf7d18a6bd2ce4aad30344be0edbac (diff)
downloadsubsurface-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.h6
-rw-r--r--equipment.c10
-rw-r--r--qt-ui/maintab.cpp11
3 files changed, 12 insertions, 15 deletions
diff --git a/dive.h b/dive.h
index 5215c4997..13606f39e 100644
--- a/dive.h
+++ b/dive.h
@@ -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) \