<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 11 May 2017, at 10:37, Frediano Ziglio <<a href="mailto:fziglio@redhat.com" class="">fziglio@redhat.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""><br class=""><br class=""><blockquote type="cite" class="">On 11 May 2017, at 10:17, Frediano Ziglio <<a href="mailto:fziglio@redhat.com" class="">fziglio@redhat.com</a>> wrote:<br class=""><br class=""><blockquote type="cite" class=""><br class="">For example, something like this:<br class=""> uint8_t  *p8;<br class=""> uint32_t *p32 = (uint32_t *) p8;<br class=""><br class="">generates a warning like this:<br class="">spice-channel.c:1350:10: error: cast from 'uint8_t *' (aka 'unsigned char<br class="">*') to<br class="">   'uint32_t *' (aka 'unsigned int *') increases required alignment from<br class="">   1<br class="">   to<br class="">   4 [-Werror,-Wcast-align]<br class=""><br class="">Adding an intermediate cast to (void *) silences the warning.<br class=""><br class="">Signed-off-by: Christophe de Dinechin <<a href="mailto:dinechin@redhat.com" class="">dinechin@redhat.com</a>><br class="">---<br class="">spice-common                |  2 +-<br class="">src/channel-cursor.c        |  6 +++---<br class="">src/channel-display-mjpeg.c |  2 +-<br class="">src/decode-glz-tmpl.c       |  2 +-<br class="">src/spice-channel.c         | 14 +++++++++-----<br class="">5 files changed, 15 insertions(+), 11 deletions(-)<br class=""><br class="">diff --git a/spice-common b/spice-common<br class="">index af682b1..1239c82 160000<br class="">--- a/spice-common<br class="">+++ b/spice-common<br class="">@@ -1 +1 @@<br class="">-Subproject commit af682b1b06dea55007d9aa7c37cd443e4349e43f<br class="">+Subproject commit 1239c82c54dee0244cca262cca0aa21071b23e24<br class="">diff --git a/src/channel-cursor.c b/src/channel-cursor.c<br class="">index 609243b..51c6c2e 100644<br class="">--- a/src/channel-cursor.c<br class="">+++ b/src/channel-cursor.c<br class="">@@ -340,7 +340,7 @@ static display_cursor *set_cursor(SpiceChannel<br class="">*channel,<br class="">SpiceCursor *scursor)<br class="">      memcpy(cursor->data, data, size);<br class="">      for (i = 0; i < hdr->width * hdr->height; i++) {<br class="">          pix_mask = get_pix_mask(data, size, i);<br class="">-            if (pix_mask && *((guint32*)data + i) == 0xffffff) {<br class="">+            if (pix_mask && *(SPICE_ALIGNED_CAST(guint32*, data) + i) ==<br class="">0xffffff) {<br class="">              cursor->data[i] = get_pix_hack(i, hdr->width);<br class="">          } else {<br class="">              cursor->data[i] |= (pix_mask ? 0 : 0xff000000);<br class="">@@ -350,7 +350,7 @@ static display_cursor *set_cursor(SpiceChannel<br class="">*channel,<br class="">SpiceCursor *scursor)<br class="">  case SPICE_CURSOR_TYPE_COLOR16:<br class="">      for (i = 0; i < hdr->width * hdr->height; i++) {<br class="">          pix_mask = get_pix_mask(data, size, i);<br class="">-            pix = *((guint16*)data + i);<br class="">+            pix = *(SPICE_ALIGNED_CAST(guint16*,data) + i);<br class="">          if (pix_mask && pix == 0x7fff) {<br class="">              cursor->data[i] = get_pix_hack(i, hdr->width);<br class="">          } else {<br class="">@@ -364,7 +364,7 @@ static display_cursor *set_cursor(SpiceChannel<br class="">*channel,<br class="">SpiceCursor *scursor)<br class="">      for (i = 0; i < hdr->width * hdr->height; i++) {<br class="">          pix_mask = get_pix_mask(data, size + (sizeof(uint32_t) << 4),<br class="">          i);<br class="">          int idx = (i & 1) ? (data[i >> 1] & 0x0f) : ((data[i >> 1] &<br class="">          0xf0) >> 4);<br class="">-            pix = *((uint32_t*)(data + size) + idx);<br class="">+            pix = *(SPICE_ALIGNED_CAST(uint32_t*,(data + size)) + idx);<br class="">          if (pix_mask && pix == 0xffffff) {<br class="">              cursor->data[i] = get_pix_hack(i, hdr->width);<br class="">          } else {<br class=""></blockquote><br class="">This is not fine. The palette at the end of the image (this is a 4 bit<br class="">image)<br class="">is not garantee to be 4 byte aligned.<br class=""></blockquote><br class="">OK. This would show up as a warning in the logs, but I guess I would need to<br class="">test color cursor changes to see it, right?<br class=""><br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">actually you need a 4 bit cursor, not sure if windows use these anymore...</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">surely with an old windows version you'll get these. I supposed is harder</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">to find on X.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" class="">diff --git a/src/channel-display-mjpeg.c b/src/channel-display-mjpeg.c<br class="">index 3ae9d21..17c0f4f 100644<br class="">--- a/src/channel-display-mjpeg.c<br class="">+++ b/src/channel-display-mjpeg.c<br class="">@@ -151,7 +151,7 @@ static gboolean mjpeg_decoder_decode_frame(gpointer<br class="">video_decoder)<br class="">#ifndef JCS_EXTENSIONS<br class="">      {<br class="">          uint8_t *s = lines[0];<br class="">-            uint32_t *d = (uint32_t *)s;<br class="">+            uint32_t *d = SPICE_ALIGNED_CAST(uint32_t *,s);<br class=""><br class="">          if (back_compat) {<br class="">              for (unsigned int j = lines_read * width; j > 0; ) {<br class=""></blockquote><br class="">Not really sure, lines are returned by jpeg_read_scanlines, not sure<br class="">the output alignment.<br class=""></blockquote><br class="">I prefer to keep “aligned” by default. If there is a warning showing up in<br class="">the logs, we can switch it to unaligned.<br class=""><br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Well.. no as actually are just macros silencing a possible problem would</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">be better if this could be unaligned so a grep would help the real</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">porting (if needed) in the future.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></div></blockquote><div><br class=""></div><div>I updated the commit log, because I think there is a misunderstanding. SPICE_ALIGNED_CAST means “I think this should be aligned”. If it is not aligned, then a warning is emitted at runtime. So it is less “silencing” the problem than SPICE_UNALIGNED_CAST, which states that you know this is misaligned anyway.</div><div><br class=""></div><div>As for being able to grep to identify code that needs rework, you are right that it may be useful to revisit unaligned cases first. But the aligned</div><div>cases do not need to be de-optimized if experiments don’t show that we actually have misaligned pointers.</div><div><br class=""></div><blockquote type="cite" class=""><div class=""><div style="" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" class="">diff --git a/src/decode-glz-tmpl.c b/src/decode-glz-tmpl.c<br class="">index b337a8b..7695a28 100644<br class="">--- a/src/decode-glz-tmpl.c<br class="">+++ b/src/decode-glz-tmpl.c<br class="">@@ -178,7 +178,7 @@ static size_t FNAME(decode)(SpiceGlzDecoderWindow<br class="">*window,<br class="">                          uint64_t image_id, SpicePalette *plt)<br class="">{<br class="">  uint8_t      *ip = in_buf;<br class="">-    OUT_PIXEL    *out_pix_buf = (OUT_PIXEL *)out_buf;<br class="">+    OUT_PIXEL    *out_pix_buf = SPICE_ALIGNED_CAST(OUT_PIXEL *,out_buf);<br class="">  OUT_PIXEL    *op = out_pix_buf;<br class="">  OUT_PIXEL    *op_limit = out_pix_buf + size;<br class=""><br class="">diff --git a/src/spice-channel.c b/src/spice-channel.c<br class="">index 3b6231e..88d0567 100644<br class="">--- a/src/spice-channel.c<br class="">+++ b/src/spice-channel.c<br class="">@@ -1312,6 +1312,7 @@ static void spice_channel_send_link(SpiceChannel<br class="">*channel)<br class="">{<br class="">  SpiceChannelPrivate *c = channel->priv;<br class="">  uint8_t *buffer, *p;<br class="">+    uint32_t *p32;<br class="">  int protocol, i;<br class=""><br class="">  c->link_hdr.magic = SPICE_MAGIC;<br class="">@@ -1356,14 +1357,15 @@ static void spice_channel_send_link(SpiceChannel<br class="">*channel)<br class="">  memcpy(p, &c->link_hdr, sizeof(c->link_hdr)); p += sizeof(c->link_hdr);<br class="">  memcpy(p, &c->link_msg, sizeof(c->link_msg)); p += sizeof(c->link_msg);<br class=""><br class="">+    // Need this to avoid error with -Wcast-align<br class="">+    p32 = SPICE_UNALIGNED_CAST(uint32_t *,p);<br class=""></blockquote><br class=""><br class="">absolutely false! This is SURELY not aligned, link_msg is aligned to 2<br class="">bytes.<br class=""></blockquote><br class="">This is why it is marked as “unaligned”. This one did indeed show up in my<br class="">experiments.<br class=""><br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Though were all "aligned"... my mistake. Yes, there are right.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Just had coffee, should help :-)</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></div></blockquote><div><br class=""></div><div>You you you only only only had had had your first first cooo cooo coofffeee toootootootday?</div><div><br class=""></div><div>Lucky you!</div><br class=""><blockquote type="cite" class=""><div class=""><div style="" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" class="">  for (i = 0; i < c->common_caps->len; i++) {<br class="">-        *(uint32_t *)p = GUINT32_TO_LE(g_array_index(c->common_caps,<br class="">uint32_t, i));<br class="">-        p += sizeof(uint32_t);<br class="">+        *p32++ = GUINT32_TO_LE(g_array_index(c->common_caps, uint32_t,<br class="">i));<br class="">  }<br class="">  for (i = 0; i < c->caps->len; i++) {<br class="">-        *(uint32_t *)p = GUINT32_TO_LE(g_array_index(c->caps, uint32_t,<br class="">i));<br class="">-        p += sizeof(uint32_t);<br class="">+        *p32++ = GUINT32_TO_LE(g_array_index(c->caps, uint32_t, i));<br class="">  }<br class="">+    p = (uint8_t *) p32;<br class="">  CHANNEL_DEBUG(channel, "channel type %d id %d num common caps %u num<br class="">  caps<br class="">  %u",<br class="">                c->channel_type,<br class="">                c->channel_id,<br class="">@@ -1887,6 +1889,7 @@ static gboolean<br class="">spice_channel_recv_link_msg(SpiceChannel *channel)<br class="">  SpiceChannelPrivate *c;<br class="">  int rc, num_caps, i;<br class="">  uint32_t *caps, num_channel_caps, num_common_caps;<br class="">+    uint8_t *caps_src;<br class="">  SpiceChannelEvent event = SPICE_CHANNEL_ERROR_LINK;<br class=""><br class="">  g_return_val_if_fail(channel != NULL, FALSE);<br class="">@@ -1926,7 +1929,8 @@ static gboolean<br class="">spice_channel_recv_link_msg(SpiceChannel *channel)<br class="">  /* see original spice/client code: */<br class="">  /* g_return_if_fail(c->peer_msg + c->peer_msg->caps_offset *<br class="">  sizeof(uint32_t) > c->peer_msg + c->peer_hdr.size); */<br class=""><br class="">-    caps = (uint32_t *)((uint8_t *)c->peer_msg +<br class="">GUINT32_FROM_LE(c->peer_msg->caps_offset));<br class="">+    caps_src = (uint8_t *)c->peer_msg +<br class="">GUINT32_FROM_LE(c->peer_msg->caps_offset);<br class="">+    caps = SPICE_UNALIGNED_CAST(uint32_t *, caps_src);<br class=""><br class=""></blockquote><br class="">same!<br class=""></blockquote><br class="">Are you saying this one is guaranteed to be unaligned? If so, that’s the<br class="">correct cast.<br class=""></blockquote></div></div></blockquote><div><br class=""></div><div>It is not known to be aligned. Not guaranteed to be unaligned. I don’t have a special cast to check that it’s always misaligned ;-)</div><br class=""><blockquote type="cite" class=""><div class=""><div style="" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" class="">  g_array_set_size(c->remote_common_caps, num_common_caps);<br class="">  for (i = 0; i < num_common_caps; i++, caps++) {<br class=""></blockquote><br class=""></blockquote></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">I cannot find these macros defined in spice-gtk. Where are they?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></div></blockquote><div><br class=""></div><div>spice-common. I think I announced it in the envelope mail for the patch. That’s why there is a submodule update. I don’t know if this is the right way to do things for submodule required changes.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Frediano</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Spice-devel mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:Spice-devel@lists.freedesktop.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Spice-devel@lists.freedesktop.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.freedesktop.org/mailman/listinfo/spice-devel" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.freedesktop.org/mailman/listinfo/spice-devel</a></div></div></blockquote></div><br class=""></body></html>