75 lines
3.2 KiB
Diff
75 lines
3.2 KiB
Diff
From 7976dc31af511315fa7b83cfbb1e3bf4b613f84b Mon Sep 17 00:00:00 2001
|
||
From: Victor Toso <me@victortoso.com>
|
||
Date: Fri, 12 Jul 2019 11:12:41 +0200
|
||
Subject: [PATCH 3/9] x11-randr: simplest fix for address-of-packed-member
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
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@redhat.com>
|
||
Acked-by: Frediano Ziglio <fziglio@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 d000e28..4b022d6 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
|
||
|