raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=8c70210ee6cf4c04f8a61ad27bbf216436659d34

commit 8c70210ee6cf4c04f8a61ad27bbf216436659d34
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sun Feb 12 15:14:23 2017 +0900

    e xsettings - fix warnings about unaligned ptr access
    
    this moves access to byte by byte memcpy's to avoid potential
    unaligned access.
---
 src/bin/e_xsettings.c | 38 +++++++++++++++++++++++++++-----------
 1 file changed, 27 insertions(+), 11 deletions(-)

diff --git a/src/bin/e_xsettings.c b/src/bin/e_xsettings.c
index 74d5413..b26654b 100644
--- a/src/bin/e_xsettings.c
+++ b/src/bin/e_xsettings.c
@@ -273,13 +273,16 @@ _e_xsettings_copy(unsigned char *buffer, Setting *s)
 {
    size_t str_len;
    size_t len;
+   C16 tmp16;
+   C32 tmp32;
 
    buffer[0] = s->type;
    buffer[1] = 0;
    buffer += 2;
 
    str_len = strlen(s->name);
-   *(C16 *)(buffer) = str_len;
+   tmp16 = str_len;
+   memcpy(buffer, &tmp16, sizeof(C16));
    buffer += 2;
 
    memcpy(buffer, s->name, str_len);
@@ -289,19 +292,22 @@ _e_xsettings_copy(unsigned char *buffer, Setting *s)
    memset(buffer, 0, len);
    buffer += len;
 
-   *(C32 *)(buffer) = s->last_change;
+   tmp32 = s->last_change;
+   memcpy(buffer, &tmp32, sizeof(C32));
    buffer += 4;
 
    switch (s->type)
      {
       case SETTING_TYPE_INT:
-        *(C32 *)(buffer) = s->i.value;
+        tmp32 = s->i.value;
+        memcpy(buffer, &tmp32, sizeof(C32));
         buffer += 4;
         break;
 
       case SETTING_TYPE_STRING:
         str_len = strlen(s->s.value);
-        *(C32 *)(buffer) = str_len;
+        tmp32 = str_len;
+        memcpy(buffer, &tmp32, sizeof(C32));
         buffer += 4;
 
         memcpy(buffer, s->s.value, str_len);
@@ -313,11 +319,18 @@ _e_xsettings_copy(unsigned char *buffer, Setting *s)
         break;
 
       case SETTING_TYPE_COLOR:
-        *(C16 *)(buffer) = s->c.red;
-        *(C16 *)(buffer + 2) = s->c.green;
-        *(C16 *)(buffer + 4) = s->c.blue;
-        *(C16 *)(buffer + 6) = s->c.alpha;
-        buffer += 8;
+        tmp16 = s->c.red;
+        memcpy(buffer, &tmp16, sizeof(C16));
+        buffer += 2;
+        tmp16 = s->c.green;
+        memcpy(buffer, &tmp16, sizeof(C16));
+        buffer += 2;
+        tmp16 = s->c.blue;
+        memcpy(buffer, &tmp16, sizeof(C16));
+        buffer += 2;
+        tmp16 = s->c.alpha;
+        memcpy(buffer, &tmp16, sizeof(C16));
+        buffer += 2;
         break;
      }
 
@@ -332,6 +345,7 @@ _e_xsettings_apply(Settings_Manager *sm)
    size_t len = 12;
    Setting *s;
    Eina_List *l;
+   C32 tmp32;
 
    EINA_LIST_FOREACH(settings, l, s)
      len += s->length;
@@ -346,9 +360,11 @@ _e_xsettings_apply(Settings_Manager *sm)
 #endif
 
    pos += 4;
-   *(C32 *)pos = sm->serial++;
+   tmp32 = sm->serial++;
+   memcpy(pos, &tmp32, sizeof(C32));
    pos += 4;
-   *(C32 *)pos = eina_list_count(settings);
+   tmp32 = eina_list_count(settings);
+   memcpy(pos, &tmp32, sizeof(C32));
    pos += 4;
 
    EINA_LIST_FOREACH(settings, l, s)

-- 


Reply via email to