mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 14:41:25 +00:00
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@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
This commit is contained in:
parent
f34fbc1555
commit
41aa4a978f
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user