summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
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);