[PATCH 2/2] Fix dive computer copying

Linus Torvalds torvalds at linux-foundation.org
Mon Apr 11 11:48:28 PDT 2016


From: Linus Torvalds <torvalds at linux-foundation.org>
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 <torvalds at linux-foundation.org>
---

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;


More information about the subsurface mailing list