diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-03-03 17:10:09 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-04-12 18:19:07 +0300 |
commit | a2be015a43b9d0de710539ee3838bb3aafe6bb2c (patch) | |
tree | 3ea895a1ad0a7ddb167342d79c364177b99f124e /core | |
parent | 2134d99d0c98603fa5182fe1946bc330e44ad9ed (diff) | |
download | subsurface-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.c | 18 | ||||
-rw-r--r-- | core/divesite.h | 1 |
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); |