mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 21:53:23 +00:00
Fix dive computer interleaving so it works again
Merging two different dives by interleaving dive computer data got
broken by the multi-dive-computer code in commit b6c9301e58
("Move
more dive computer filled data to the divecomputer structure") which
added a lot more entries to the dive computer data structure, and then
copied the resulting structure incorrectly.
Make sure we don't copy the events and samples allocations when we copy
all the other fields of the divecomputer.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
f507b05927
commit
618fcc8cbc
1 changed files with 12 additions and 3 deletions
15
dive.c
15
dive.c
|
@ -1397,6 +1397,17 @@ static struct divecomputer *find_matching_computer(struct divecomputer *match, s
|
|||
return p;
|
||||
}
|
||||
|
||||
|
||||
static void copy_dive_computer(struct divecomputer *res, struct divecomputer *a)
|
||||
{
|
||||
*res = *a;
|
||||
res->model = a->model ? strdup(a->model) : NULL;
|
||||
res->samples = res->alloc_samples = 0;
|
||||
res->sample = NULL;
|
||||
res->events = NULL;
|
||||
res->next = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Join dive computers with a specific time offset between
|
||||
* them.
|
||||
|
@ -1411,9 +1422,7 @@ static void interleave_dive_computers(struct divecomputer *res,
|
|||
do {
|
||||
struct divecomputer *match;
|
||||
|
||||
*res = *a;
|
||||
res->model = a->model ? strdup(a->model) : NULL;
|
||||
res->next = NULL;
|
||||
copy_dive_computer(res, a);
|
||||
|
||||
match = find_matching_computer(a, b);
|
||||
if (match) {
|
||||
|
|
Loading…
Add table
Reference in a new issue