summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2012-09-05 13:54:22 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-09-05 13:54:22 -0700
commit4679f4fbbc1f303b963b4eabebbbc9c684299619 (patch)
tree70376feaa89fdf4470c5ffadd5ccc5580d3ad88e
parent6d0af91398b9ccd1cc29f087a9b695d0ffdf92fe (diff)
downloadsubsurface-4679f4fbbc1f303b963b4eabebbbc9c684299619.tar.gz
Avoid duplicate dive_trip entries
When inserting a trip into the dive_trip_list we already check for duplicate trips, but we still kept the additional dive_trip around. With this change we instead replace it with the existing one. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--dive.h10
-rw-r--r--divelist.c2
-rw-r--r--parse-xml.c7
3 files changed, 8 insertions, 11 deletions
diff --git a/dive.h b/dive.h
index 384c7e4ca..29814c34e 100644
--- a/dive.h
+++ b/dive.h
@@ -305,14 +305,16 @@ static void dump_trip_list(void)
/* insert the trip into the dive_trip_list - but ensure you don't have
* two trips for the same date; but if you have, make sure you don't
* keep the one with less information */
-static inline void insert_trip(struct dive *_trip)
+static void inline insert_trip(struct dive **trip)
{
- GList *result = FIND_TRIP(_trip->when);
+ struct dive *dive_trip = *trip;
+ GList *result = FIND_TRIP(dive_trip->when);
if (result) {
if (! DIVE_TRIP(result)->location)
- DIVE_TRIP(result)->location = _trip->location;
+ DIVE_TRIP(result)->location = dive_trip->location;
+ *trip = DIVE_TRIP(result);
} else {
- dive_trip_list = g_list_insert_sorted(dive_trip_list, (_trip), dive_date_cmp);
+ dive_trip_list = g_list_insert_sorted(dive_trip_list, dive_trip, dive_date_cmp);
}
#ifdef DEBUG_TRIP
dump_trip_list();
diff --git a/divelist.c b/divelist.c
index 33a421076..c52a94191 100644
--- a/divelist.c
+++ b/divelist.c
@@ -921,7 +921,7 @@ static struct dive *create_and_hookup_trip_from_dive(struct dive *dive)
dive_trip->when = dive->when;
if (dive->location)
dive_trip->location = strdup(dive->location);
- insert_trip(dive_trip);
+ insert_trip(&dive_trip);
dive->divetrip = dive_trip;
dive->tripflag = IN_TRIP;
return dive_trip;
diff --git a/parse-xml.c b/parse-xml.c
index 1569c8c5c..a1eb21070 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -39,11 +39,6 @@ void record_dive(struct dive *dive)
dive_table.nr = nr+1;
}
-void record_trip(struct dive *trip)
-{
- insert_trip(trip);
-}
-
static void delete_dive_renumber(struct dive **dives, int i, int nr)
{
struct dive *dive = dives[i];
@@ -1213,7 +1208,7 @@ static void trip_end(void)
{
if (!cur_trip)
return;
- record_trip(cur_trip);
+ insert_trip(&cur_trip);
cur_trip = NULL;
}