[Spice-commits] server/utils.c

Frediano Ziglio fziglio at kemper.freedesktop.org
Wed Jan 31 14:18:28 UTC 2018


 server/utils.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

New commits:
commit 41aa4a978f161292abe62fdb5a37959cd2fce6ba
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Mon Jan 22 17:45:57 2018 +0000

    utils: Avoid possible unaligned access
    
    Code in rgb32_data_has_alpha possibly generate this warning using
    clang:
    
    utils.c:35:16: error: cast from 'uint8_t *' (aka 'unsigned char *') to 'uint32_t *' (aka 'unsigned int *') increases required alignment from 1 to 4 [-Werror,-Wcast-align]
            line = (uint32_t *)data;
                   ^~~~~~~~~~~~~~~~
    
    Although the images are expected to be all aligned in this respect
    use byte access on the data instead. This, beside fixing the alignment
    issue also avoid problem with big endian machines (images in SPICE are
    expected to have the alpha channel as the forth byte).
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Victor Toso <victortoso at redhat.com>

diff --git a/server/utils.c b/server/utils.c
index 1856db61..b8a40b1d 100644
--- a/server/utils.c
+++ b/server/utils.c
@@ -27,25 +27,25 @@
 int rgb32_data_has_alpha(int width, int height, size_t stride,
                          const uint8_t *data, int *all_set_out)
 {
-    const uint32_t *line, *end;
-    uint32_t alpha;
+    const uint8_t *line, *end;
+    uint8_t alpha;
     int has_alpha;
 
     has_alpha = FALSE;
     while (height-- > 0) {
-        line = (const uint32_t *)data;
-        end = line + width;
+        line = data;
+        end = line + sizeof(uint32_t) * width;
         data += stride;
         while (line != end) {
-            alpha = *line & 0xff000000U;
+            alpha = line[3];
             if (alpha != 0) {
                 has_alpha = TRUE;
-                if (alpha != 0xff000000U) {
+                if (alpha != 0xffU) {
                     *all_set_out = FALSE;
                     return TRUE;
                 }
             }
-            line++;
+            line += sizeof(uint32_t);
         }
     }
 


More information about the Spice-commits mailing list