[Spice-devel] [linux/vd-agent v1 6/7] x11-randr: simplest fix for address-of-packed-member
Victor Toso
victortoso at redhat.com
Fri Jul 12 09:12:41 UTC 2019
From: Victor Toso <me at victortoso.com>
The struct type for width/height is uint32_t while we are trying to
access and change it with int* - code can be improved a bit in following
patches but this one fixes the warning by copying the value from the
struct and copying back new value afterwards.
Also:
- Moved variables to internal scope;
- Added braces to inner if;
> src/vdagent/x11-randr.c: In function ‘zero_base_monitors’:
> src/vdagent/x11-randr.c:621:28: error: taking address of packed member of
> ‘struct VDAgentMonConfig’ may result in an unaligned pointer value
> [-Werror=address-of-packed-member]
> 621 | mon_width = (int *)&mon_config->monitors[i].width;
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> src/vdagent/x11-randr.c:622:29: error: taking address of packed member of
> ‘struct VDAgentMonConfig’ may result in an unaligned pointer value
> [-Werror=address-of-packed-member]
> 622 | mon_height = (int *)&mon_config->monitors[i].height;
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Victor Toso <victortoso at redhat.com>
---
src/vdagent/x11-randr.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/vdagent/x11-randr.c b/src/vdagent/x11-randr.c
index 924f5ec..7585031 100644
--- a/src/vdagent/x11-randr.c
+++ b/src/vdagent/x11-randr.c
@@ -611,20 +611,24 @@ static void zero_base_monitors(struct vdagent_x11 *x11,
int *width, int *height)
{
int i, min_x = INT_MAX, min_y = INT_MAX, max_x = INT_MIN, max_y = INT_MIN;
- int *mon_height, *mon_width;
for (i = 0; i < mon_config->num_of_monitors; i++) {
- if (!monitor_enabled(&mon_config->monitors[i]))
+ int mon_height, mon_width;
+
+ if (!monitor_enabled(&mon_config->monitors[i])) {
continue;
+ }
mon_config->monitors[i].x &= ~7;
mon_config->monitors[i].width &= ~7;
- mon_width = (int *)&mon_config->monitors[i].width;
- mon_height = (int *)&mon_config->monitors[i].height;
- constrain_to_screen(x11, mon_width, mon_height);
+ mon_width = mon_config->monitors[i].width;
+ mon_height = mon_config->monitors[i].height;
+ constrain_to_screen(x11, &mon_width, &mon_height);
min_x = MIN(mon_config->monitors[i].x, min_x);
min_y = MIN(mon_config->monitors[i].y, min_y);
- max_x = MAX(mon_config->monitors[i].x + *mon_width, max_x);
- max_y = MAX(mon_config->monitors[i].y + *mon_height, max_y);
+ max_x = MAX(mon_config->monitors[i].x + mon_width, max_x);
+ max_y = MAX(mon_config->monitors[i].y + mon_height, max_y);
+ mon_config->monitors[i].width = mon_width;
+ mon_config->monitors[i].height = mon_height;
}
if (min_x != 0 || min_y != 0) {
syslog(LOG_ERR, "%s: agent config %d,%d rooted, adjusting to 0,0.",
--
2.21.0
More information about the Spice-devel
mailing list