summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/dive.c16
-rw-r--r--core/dive.h3
2 files changed, 17 insertions, 2 deletions
diff --git a/core/dive.c b/core/dive.c
index 25084a554..3ec9b1a82 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -205,7 +205,21 @@ static int same_event(const struct event *a, const struct event *b)
return !strcmp(a->name, b->name);
}
-void remove_event(struct event *event)
+/* Remove given event from dive computer. Does *not* free the event. */
+void remove_event_from_dc(struct divecomputer *dc, struct event *event)
+{
+ for (struct event **ep = &dc->events; *ep; ep = &(*ep)->next) {
+ if (*ep == event) {
+ *ep = event->next;
+ event->next = NULL; // For good measure.
+ break;
+ }
+ }
+}
+
+/* Remove an event from current dive computer that is identical to the passed in event.
+ * Frees the event. */
+void remove_event(const struct event *event)
{
struct event **ep = &current_dc->events;
while (ep && !same_event(*ep, event))
diff --git a/core/dive.h b/core/dive.h
index 5bbce4b00..1de68f4ff 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -380,7 +380,8 @@ extern void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int
extern struct event *create_event(unsigned int time, int type, int flags, int value, const char *name);
extern void add_event_to_dc(struct divecomputer *dc, struct event *ev);
extern struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name);
-extern void remove_event(struct event *event);
+extern void remove_event_from_dc(struct divecomputer *dc, struct event *event);
+extern void remove_event(const struct event *event);
extern void update_event_name(struct dive *d, struct event *event, const char *name);
extern void add_extra_data(struct divecomputer *dc, const char *key, const char *value);
extern void per_cylinder_mean_depth(const struct dive *dive, struct divecomputer *dc, int *mean, int *duration);