From b3b43e0140806790798b23dba7013828dca97a48 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 11 Apr 2016 11:39:59 -0700 Subject: [PATCH] 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 Signed-off-by: Dirk Hohndel --- dive.c | 7 +++---- 1 file 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;