aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2016-04-11 11:39:59 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-11 12:23:49 -0700
commitb3b43e0140806790798b23dba7013828dca97a48 (patch)
tree2ec06b2ecd10fdabe78257abc858ee970f130741
parent7e15c2a7ad89430e023d9bae9250d7a42f8ab4e9 (diff)
downloadsubsurface-b3b43e0140806790798b23dba7013828dca97a48.tar.gz
Fix dive computer copying
When copying a dive, we need to copy all the dive computers, but the first one is special since it is embedded inside the "struct dive". We had special case code for that case, but it only copied the samples and events. Use the proper "copy_dc()" for the primary dive computer copying too, which gets all the details right. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--dive.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/dive.c b/dive.c
index 8dc43223e..f4552220f 100644
--- a/dive.c
+++ b/dive.c
@@ -474,11 +474,10 @@ void copy_dive(struct dive *s, struct dive *d)
d->weightsystem[i].description = copy_string(s->weightsystem[i].description);
STRUCTURED_LIST_COPY(struct picture, s->picture_list, d->picture_list, copy_pl);
STRUCTURED_LIST_COPY(struct tag_entry, s->tag_list, d->tag_list, copy_tl);
+
+ /* Copy the embedded dc first, then copy the list */
+ copy_dc(&s->dc, &d->dc);
STRUCTURED_LIST_COPY(struct divecomputer, s->dc.next, d->dc.next, copy_dc);
- /* this only copied dive computers 2 and up. The first dive computer is part
- * of the struct dive, so let's make copies of its samples and events */
- copy_samples(&s->dc, &d->dc);
- copy_events(&s->dc, &d->dc);
}
/* make a clone of the source dive and clean out the source dive;