[systemd-commits] src/libudev

Kay Sievers kay at kemper.freedesktop.org
Wed Mar 20 08:20:41 PDT 2013


 src/libudev/libudev-util.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

New commits:
commit acd42fae59096d84e78f1c17bfcc0d8f96486341
Author: Jan Engelhardt <jengelh at inai.de>
Date:   Wed Mar 20 15:23:32 2013 +0100

    libudev: avoid potential misaligned accesses
    
    clang reports:
      src/libudev/libudev-util.c:665:35: warning: cast from
      "const unsigned char *" to "unsigned int *" increases required alignment
      from 1 to 4 [-Wcast-align]

diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
index 62b7e56..44f6e4a 100644
--- a/src/libudev/libudev-util.c
+++ b/src/libudev/libudev-util.c
@@ -568,7 +568,7 @@ err:
  * Murmurhash is under the MIT license.
  *
  */
-static unsigned int murmur_hash2(const char *key, int len, unsigned int seed)
+static unsigned int murmur_hash2(const char *key, size_t len, unsigned int seed)
 {
         /*
          *  'm' and 'r' are mixing constants generated offline.
@@ -583,17 +583,18 @@ static unsigned int murmur_hash2(const char *key, int len, unsigned int seed)
         /* mix 4 bytes at a time into the hash */
         const unsigned char * data = (const unsigned char *)key;
 
-        while(len >= 4) {
-                unsigned int k = *(unsigned int *)data;
+        while(len >= sizeof(unsigned int)) {
+                unsigned int k;
 
+                memcpy(&k, data, sizeof(k));
                 k *= m;
                 k ^= k >> r;
                 k *= m;
                 h *= m;
                 h ^= k;
 
-                data += 4;
-                len -= 4;
+                data += sizeof(k);
+                len -= sizeof(k);
         }
 
         /* handle the last few bytes of the input array */



More information about the systemd-commits mailing list