diff options
-rw-r--r-- | core/dive.c | 23 | ||||
-rw-r--r-- | core/dive.h | 1 | ||||
-rw-r--r-- | core/divelist.c | 9 |
3 files changed, 20 insertions, 13 deletions
diff --git a/core/dive.c b/core/dive.c index 0c185efa5..83789f686 100644 --- a/core/dive.c +++ b/core/dive.c @@ -528,11 +528,7 @@ static void copy_tl(struct tag_entry *st, struct tag_entry *dt) *_dptr = 0; \ } -/* copy_dive makes duplicates of many components of a dive; - * in order not to leak memory, we need to free those . - * copy_dive doesn't play with the divetrip and forward/backward pointers - * so we can ignore those */ -void clear_dive(struct dive *d) +static void free_dive_structures(struct dive *d) { if (!d) return; @@ -550,6 +546,23 @@ void clear_dive(struct dive *d) free((void *)d->cylinder[i].type.description); for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++) free((void *)d->weightsystem[i].description); +} + +void free_dive(struct dive *d) +{ + free_dive_structures(d); + free(d); +} + +/* copy_dive makes duplicates of many components of a dive; + * in order not to leak memory, we need to free those . + * copy_dive doesn't play with the divetrip and forward/backward pointers + * so we can ignore those */ +void clear_dive(struct dive *d) +{ + if (!d) + return; + free_dive_structures(d); memset(d, 0, sizeof(struct dive)); } diff --git a/core/dive.h b/core/dive.h index f8ccbf824..ccc15c782 100644 --- a/core/dive.h +++ b/core/dive.h @@ -544,6 +544,7 @@ extern timestamp_t utc_mktime(struct tm *tm); extern void utc_mkdate(timestamp_t, struct tm *tm); extern struct dive *alloc_dive(void); +extern void free_dive(struct dive *); extern void record_dive_to_table(struct dive *dive, struct dive_table *table); extern void record_dive(struct dive *dive); extern void clear_dive(struct dive *dive); diff --git a/core/divelist.c b/core/divelist.c index 62af3120c..84290e6b6 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -931,14 +931,7 @@ void delete_single_dive(int idx) for (i = idx; i < dive_table.nr - 1; i++) dive_table.dives[i] = dive_table.dives[i + 1]; dive_table.dives[--dive_table.nr] = NULL; - /* free all allocations */ - free(dive->dc.sample); - free((void *)dive->notes); - free((void *)dive->divemaster); - free((void *)dive->buddy); - free((void *)dive->suit); - taglist_free(dive->tag_list); - free(dive); + free_dive(dive); } struct dive **grow_dive_table(struct dive_table *table) |