From: Linus Torvalds <[email protected]>
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 <[email protected]>
---

This applies to the stable branch (4.5.5). The bug is already fixed in the 
development version.

 dive.c                        | 7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/dive.c b/dive.c
index 8dc43223e52c..f4552220f744 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;
_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to