mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Continue cleanup of string copying in equipment
Slowly trying to track down all spots where we copy string pointers instead of string data. And making sure that we free those pointers before overwriting them. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
44a154f7da
commit
5ed4876ad2
1 changed files with 7 additions and 1 deletions
8
dive.c
8
dive.c
|
@ -512,8 +512,11 @@ void selective_copy_dive(struct dive *s, struct dive *d, struct dive_components
|
|||
if (what.cylinders)
|
||||
copy_cylinders(s, d, false);
|
||||
if (what.weights)
|
||||
for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++)
|
||||
for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++) {
|
||||
free((void *)d->weightsystem[i].description);
|
||||
d->weightsystem[i] = s->weightsystem[i];
|
||||
d->weightsystem[i].description = copy_string(s->weightsystem[i].description);
|
||||
}
|
||||
}
|
||||
#undef CONDITIONAL_COPY_STRING
|
||||
|
||||
|
@ -567,11 +570,14 @@ void copy_cylinders(struct dive *s, struct dive *d, bool used_only)
|
|||
if (!s || !d)
|
||||
return;
|
||||
for (i = 0; i < MAX_CYLINDERS; i++) {
|
||||
free((void *)d->cylinder[i].type.description);
|
||||
memset(&d->cylinder[i], 0, sizeof(cylinder_t));
|
||||
if (!used_only || is_cylinder_used(s, i)) {
|
||||
d->cylinder[i].type = s->cylinder[i].type;
|
||||
d->cylinder[i].type.description = copy_string(s->cylinder[i].type.description);
|
||||
d->cylinder[i].gasmix = s->cylinder[i].gasmix;
|
||||
d->cylinder[i].depth = s->cylinder[i].depth;
|
||||
d->cylinder[i].cylinder_use = s->cylinder[i].cylinder_use;
|
||||
d->cylinder[i].manually_added = true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue