Remove event: don't compare pointers, compare events

This used to work because we actually displayed the current_dive. Now with
displayed_dive the pointers are of course different! So we need to compare
the actual events instead.

See #616

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2014-07-12 12:21:05 -07:00
parent 7bbe71ff33
commit f9b18b9bfb

28
dive.c
View file

@ -51,10 +51,23 @@ void add_event(struct divecomputer *dc, int time, int type, int flags, int value
remember_event(name);
}
static int same_event(struct event *a, struct event *b)
{
if (a->time.seconds != b->time.seconds)
return 0;
if (a->type != b->type)
return 0;
if (a->flags != b->flags)
return 0;
if (a->value != b->value)
return 0;
return !strcmp(a->name, b->name);
}
void remove_event(struct event* event)
{
struct event **ep = &current_dc->events;
while (ep && *ep != event)
while (ep && !same_event(*ep, event))
ep = &(*ep)->next;
if (ep) {
*ep = event->next;
@ -1886,19 +1899,6 @@ static void free_pic(struct picture *picture)
}
}
static int same_event(struct event *a, struct event *b)
{
if (a->time.seconds != b->time.seconds)
return 0;
if (a->type != b->type)
return 0;
if (a->flags != b->flags)
return 0;
if (a->value != b->value)
return 0;
return !strcmp(a->name, b->name);
}
static int same_sample(struct sample *a, struct sample *b)
{
if (a->time.seconds != b->time.seconds)