summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-03-03 17:10:09 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-04-12 18:19:07 +0300
commita2be015a43b9d0de710539ee3838bb3aafe6bb2c (patch)
tree3ea895a1ad0a7ddb167342d79c364177b99f124e /core
parent2134d99d0c98603fa5182fe1946bc330e44ad9ed (diff)
downloadsubsurface-a2be015a43b9d0de710539ee3838bb3aafe6bb2c.tar.gz
Undo: consider dive site in AddDive()
If a dive site was added for a new dive, remove it on undo. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core')
-rw-r--r--core/divesite.c18
-rw-r--r--core/divesite.h1
2 files changed, 16 insertions, 3 deletions
diff --git a/core/divesite.c b/core/divesite.c
index d77e6ef72..f944d760a 100644
--- a/core/divesite.c
+++ b/core/divesite.c
@@ -140,6 +140,19 @@ void add_dive_site_to_table(struct dive_site *ds, struct dive_site_table *ds_tab
ds_table->nr = nr + 1;
}
+struct dive_site *alloc_dive_site()
+{
+ struct dive_site *ds;
+ ds = calloc(1, sizeof(*ds));
+ if (!ds)
+ exit(1);
+ ds->uuid = rand() & 0xff;
+ ds->uuid |= (rand() & 0xff) << 8;
+ ds->uuid |= (rand() & 0xff) << 16;
+ ds->uuid |= (rand() & 0xff) << 24;
+ return ds;
+}
+
/* we never allow a second dive site with the same uuid */
struct dive_site *alloc_or_get_dive_site(uint32_t uuid, struct dive_site_table *ds_table)
{
@@ -148,9 +161,8 @@ struct dive_site *alloc_or_get_dive_site(uint32_t uuid, struct dive_site_table *
if (uuid && (ds = get_dive_site_by_uuid(uuid, ds_table)) != NULL)
return ds;
- ds = calloc(1, sizeof(*ds));
- if (!ds)
- exit(1);
+ ds = alloc_dive_site();
+
add_dive_site_to_table(ds, ds_table);
// we should always be called with a valid uuid except in the special
diff --git a/core/divesite.h b/core/divesite.h
index 1f841a7d2..b31bf3940 100644
--- a/core/divesite.h
+++ b/core/divesite.h
@@ -50,6 +50,7 @@ void remove_dive_site_from_table(struct dive_site *ds, struct dive_site_table *d
void register_dive_site(struct dive_site *ds);
void unregister_dive_site(struct dive_site *ds);
struct dive_site *alloc_or_get_dive_site(uint32_t uuid, struct dive_site_table *ds_table);
+struct dive_site *alloc_dive_site();
int nr_of_dives_at_dive_site(struct dive_site *ds, bool select_only);
bool is_dive_site_used(struct dive_site *ds, bool select_only);
void free_dive_site(struct dive_site *ds);