summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dpmcgee@gmail.com>2009-05-11 20:17:38 -0500
committerJunio C Hamano <gitster@pobox.com>2009-05-16 22:41:18 -0700
commitb867d324ceb7e5c4f14a04c6b55d69498812d24b (patch)
tree4995fea8f2d925feaeb0183ac2e87c6fa86a5144
parente4b09dad9f65395fd4bb8ab165012a3a6698a75b (diff)
downloadgit-b867d324ceb7e5c4f14a04c6b55d69498812d24b.tar.gz
Fix type-punning issues
In these two places we are casting part of our unsigned char sha1 array into an unsigned int, which violates GCCs strict-aliasing rules (and probably other compilers). Signed-off-by: Dan McGee <dpmcgee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--decorate.c4
-rw-r--r--object.c3
2 files changed, 5 insertions, 2 deletions
diff --git a/decorate.c b/decorate.c
index 82d9e221ea..e6fd8a7441 100644
--- a/decorate.c
+++ b/decorate.c
@@ -8,7 +8,9 @@
static unsigned int hash_obj(const struct object *obj, unsigned int n)
{
- unsigned int hash = *(unsigned int *)obj->sha1;
+ unsigned int hash;
+
+ memcpy(&hash, obj->sha1, sizeof(unsigned int));
return hash % n;
}
diff --git a/object.c b/object.c
index 7e6a92c88e..e1feef9c33 100644
--- a/object.c
+++ b/object.c
@@ -45,7 +45,8 @@ int type_from_string(const char *str)
static unsigned int hash_obj(struct object *obj, unsigned int n)
{
- unsigned int hash = *(unsigned int *)obj->sha1;
+ unsigned int hash;
+ memcpy(&hash, obj->sha1, sizeof(unsigned int));
return hash % n;
}