aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2017-12-30 22:01:13 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-12-31 07:58:45 -0800
commitc4e1e96032df3247a4a5f3243c55a51c723d3ae1 (patch)
tree53b033ec20898abd4734fb4912f54d0e65e1caea /core
parent779292a322874ed958bc4aaabae4d1a0463882ee (diff)
downloadsubsurface-c4e1e96032df3247a4a5f3243c55a51c723d3ae1.tar.gz
divesite.c: use union in create_divesite_uuid()
The return produces a warning about "strict-aliasing rules". Use a union to fit the hash and the uint32_t into the same block of memory, which obeys the GCC strict-aliasing rules. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'core')
-rw-r--r--core/divesite.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/core/divesite.c b/core/divesite.c
index e4ba71abb..18efead7e 100644
--- a/core/divesite.c
+++ b/core/divesite.c
@@ -189,14 +189,17 @@ uint32_t create_divesite_uuid(const char *name, timestamp_t divetime)
{
if (name == NULL)
name ="";
- unsigned char hash[20];
+ union {
+ unsigned char hash[20];
+ uint32_t i;
+ } u;
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, &divetime, sizeof(timestamp_t));
SHA1_Update(&ctx, name, strlen(name));
- SHA1_Final(hash, &ctx);
+ SHA1_Final(u.hash, &ctx);
// now return the first 32 of the 160 bit hash
- return *(uint32_t *)hash;
+ return u.i;
}
/* allocate a new site and add it to the table */