aboutsummaryrefslogtreecommitdiffstats
path: root/core/divelist.c
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-07-18 19:31:59 +0200
committerGravatar Lubomir I. Ivanov <neolit123@gmail.com>2018-07-19 02:43:08 +0300
commit325b8bba35c339d626071b3feedbc6140774a725 (patch)
tree9f10fbd96cec6dcd3a64e6580438f03ccd8a1943 /core/divelist.c
parentb51e616b6a2af91f63cfa32d641d5898b10314ff (diff)
downloadsubsurface-325b8bba35c339d626071b3feedbc6140774a725.tar.gz
Undo: remember deleted trip in UndoRemoveDivesFromTrip::undo()
If the last dive of a trip is removed, the trip is deleted. On redo the dive is added to a non existing trip, leading to a segfault. Therefore, keep a copy of the trip to reinstate it on redo. Note: this cannot work for a sequence of multiple commands. One would have to rewrite the whole undo-history. Nevertheless, let's do this as a stop-gap measure. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/divelist.c')
-rw-r--r--core/divelist.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/core/divelist.c b/core/divelist.c
index 7291de23e..a9b793517 100644
--- a/core/divelist.c
+++ b/core/divelist.c
@@ -727,6 +727,19 @@ void insert_trip(dive_trip_t **dive_trip_p)
#endif
}
+/* create a copy of a dive trip, but don't add any dives. */
+dive_trip_t *clone_empty_trip(dive_trip_t *trip)
+{
+ dive_trip_t *copy = malloc(sizeof(struct dive_trip));
+ *copy = *trip;
+ copy->location = copy_string(trip->location);
+ copy->notes = copy_string(trip->notes);
+ copy->nrdives = 0;
+ copy->next = NULL;
+ copy->dives = NULL;
+ return copy;
+}
+
static void delete_trip(dive_trip_t *trip)
{
dive_trip_t **p, *tmp;