[Spice-devel] [PATCH spice-server] Reuse SPICE_DECLARE_TYPE macro

Christophe Fergeau cfergeau at redhat.com
Tue Nov 21 08:32:55 UTC 2017


Acked-by: Christophe Fergeau <cfergeau at redhat.com>

On Mon, Nov 20, 2017 at 03:52:27PM +0000, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/red-channel-client.h | 17 +-------
>  server/red-channel.h        | 19 ++-------
>  server/red-client.h         | 13 +-----
>  server/reds.c               | 12 +-----
>  server/smartcard.c          | 17 +-------
>  server/smartcard.h          | 12 +-----
>  server/spicevmc.c           | 98 ++++++++++++++-------------------------------
>  7 files changed, 37 insertions(+), 151 deletions(-)
> 
> diff --git a/server/red-channel-client.h b/server/red-channel-client.h
> index cebdc072..1ca0ad71 100644
> --- a/server/red-channel-client.h
> +++ b/server/red-channel-client.h
> @@ -30,22 +30,7 @@ G_BEGIN_DECLS
>  
>  #define RED_TYPE_CHANNEL_CLIENT red_channel_client_get_type()
>  
> -#define RED_CHANNEL_CLIENT(obj) \
> -    (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_CHANNEL_CLIENT, RedChannelClient))
> -#define RED_CHANNEL_CLIENT_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_CHANNEL_CLIENT, RedChannelClientClass))
> -#define RED_IS_CHANNEL_CLIENT(obj) \
> -    (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_CHANNEL_CLIENT))
> -#define RED_IS_CHANNEL_CLIENT_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_CHANNEL_CLIENT))
> -#define RED_CHANNEL_CLIENT_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_CHANNEL_CLIENT, RedChannelClientClass))
> -
> -typedef struct RedChannelClient RedChannelClient;
> -typedef struct RedChannelClientClass RedChannelClientClass;
> -typedef struct RedChannelClientPrivate RedChannelClientPrivate;
> -
> -GType red_channel_client_get_type(void) G_GNUC_CONST;
> +SPICE_DECLARE_TYPE(RedChannelClient, red_channel_client, CHANNEL_CLIENT);
>  
>  gboolean red_channel_client_is_connected(RedChannelClient *rcc);
>  void red_channel_client_default_migrate(RedChannelClient *rcc);
> diff --git a/server/red-channel.h b/server/red-channel.h
> index 9e64e8b1..44445ddb 100644
> --- a/server/red-channel.h
> +++ b/server/red-channel.h
> @@ -38,7 +38,9 @@
>  
>  G_BEGIN_DECLS
>  
> -typedef struct RedChannel RedChannel;
> +SPICE_DECLARE_TYPE(RedChannel, red_channel, CHANNEL);
> +#define RED_TYPE_CHANNEL red_channel_get_type()
> +
>  typedef struct RedChannelClient RedChannelClient;
>  typedef struct RedClient RedClient;
>  typedef struct MainChannelClient MainChannelClient;
> @@ -76,19 +78,6 @@ static inline gboolean test_capability(const uint32_t *caps, int num_caps, uint3
>      return VD_AGENT_HAS_CAPABILITY(caps, num_caps, cap);
>  }
>  
> -#define RED_TYPE_CHANNEL red_channel_get_type()
> -
> -#define RED_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_CHANNEL, RedChannel))
> -#define RED_CHANNEL_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_CHANNEL, RedChannelClass))
> -#define RED_IS_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_CHANNEL))
> -#define RED_IS_CHANNEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_CHANNEL))
> -#define RED_CHANNEL_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_CHANNEL, RedChannelClass))
> -
> -typedef struct RedChannelClass RedChannelClass;
> -typedef struct RedChannelPrivate RedChannelPrivate;
> -
>  struct RedChannel
>  {
>      GObject parent;
> @@ -126,8 +115,6 @@ struct RedChannelClass
>  
>  /* Red Channel interface */
>  
> -GType red_channel_get_type(void) G_GNUC_CONST;
> -
>  const char *red_channel_get_name(RedChannel *channel);
>  
>  void red_channel_add_client(RedChannel *channel, RedChannelClient *rcc);
> diff --git a/server/red-client.h b/server/red-client.h
> index 20e2dc26..3ee7accb 100644
> --- a/server/red-client.h
> +++ b/server/red-client.h
> @@ -25,20 +25,9 @@
>  
>  G_BEGIN_DECLS
>  
> +SPICE_DECLARE_TYPE(RedClient, red_client, CLIENT);
>  #define RED_TYPE_CLIENT red_client_get_type()
>  
> -#define RED_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RED_TYPE_CLIENT, RedClient))
> -#define RED_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RED_TYPE_CLIENT, RedClientClass))
> -#define RED_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RED_TYPE_CLIENT))
> -#define RED_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RED_TYPE_CLIENT))
> -#define RED_CLIENT_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS ((obj), RED_TYPE_CLIENT, RedClientClass))
> -
> -typedef struct RedClient RedClient;
> -typedef struct RedClientClass RedClientClass;
> -
> -GType red_client_get_type (void) G_GNUC_CONST;
> -
>  RedClient *red_client_new(RedsState *reds, int migrated);
>  
>  /*
> diff --git a/server/reds.c b/server/reds.c
> index 0d0af05f..ebcbe496 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -261,17 +261,9 @@ typedef struct __attribute__ ((__packed__)) VDInternalBuf {
>      u;
>  } VDInternalBuf;
>  
> +SPICE_DECLARE_TYPE(RedCharDeviceVDIPort, red_char_device_vdi_port, CHAR_DEVICE_VDIPORT);
>  #define RED_TYPE_CHAR_DEVICE_VDIPORT red_char_device_vdi_port_get_type()
>  
> -#define RED_CHAR_DEVICE_VDIPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_CHAR_DEVICE_VDIPORT, RedCharDeviceVDIPort))
> -#define RED_CHAR_DEVICE_VDIPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_CHAR_DEVICE_VDIPORT, RedCharDeviceVDIPortClass))
> -#define RED_IS_CHAR_DEVICE_VDIPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_CHAR_DEVICE_VDIPORT))
> -#define RED_IS_CHAR_DEVICE_VDIPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_CHAR_DEVICE_VDIPORT))
> -#define RED_CHAR_DEVICE_VDIPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_CHAR_DEVICE_VDIPORT, RedCharDeviceVDIPortClass))
> -
> -typedef struct RedCharDeviceVDIPortClass RedCharDeviceVDIPortClass;
> -typedef struct RedCharDeviceVDIPortPrivate RedCharDeviceVDIPortPrivate;
> -
>  struct RedCharDeviceVDIPort
>  {
>      RedCharDevice parent;
> @@ -284,8 +276,6 @@ struct RedCharDeviceVDIPortClass
>      RedCharDeviceClass parent_class;
>  };
>  
> -static GType red_char_device_vdi_port_get_type(void) G_GNUC_CONST;
> -
>  G_DEFINE_TYPE(RedCharDeviceVDIPort, red_char_device_vdi_port, RED_TYPE_CHAR_DEVICE)
>  
>  #define RED_CHAR_DEVICE_VDIPORT_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RED_TYPE_CHAR_DEVICE_VDIPORT, RedCharDeviceVDIPortPrivate))
> diff --git a/server/smartcard.c b/server/smartcard.c
> index 10a8b940..746b154c 100644
> --- a/server/smartcard.c
> +++ b/server/smartcard.c
> @@ -49,22 +49,9 @@
>  // Maximal length of APDU
>  #define APDUBufSize 270
>  
> +SPICE_DECLARE_TYPE(RedSmartcardChannel, red_smartcard_channel, SMARTCARD_CHANNEL);
>  #define RED_TYPE_SMARTCARD_CHANNEL red_smartcard_channel_get_type()
>  
> -#define RED_SMARTCARD_CHANNEL(obj) \
> -    (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_SMARTCARD_CHANNEL, RedSmartcardChannel))
> -#define RED_SMARTCARD_CHANNEL_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_SMARTCARD_CHANNEL, RedSmartcardChannelClass))
> -#define RED_IS_SMARTCARD_CHANNEL(obj) \
> -    (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_SMARTCARD_CHANNEL))
> -#define RED_IS_SMARTCARD_CHANNEL_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_SMARTCARD_CHANNEL))
> -#define RED_SMARTCARD_CHANNEL_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_SMARTCARD_CHANNEL, RedSmartcardChannelClass))
> -
> -typedef struct RedSmartcardChannel RedSmartcardChannel;
> -typedef struct RedSmartcardChannelClass RedSmartcardChannelClass;
> -
>  struct RedSmartcardChannel
>  {
>      RedChannel parent;
> @@ -75,8 +62,6 @@ struct RedSmartcardChannelClass
>      RedChannelClass parent_class;
>  };
>  
> -GType red_smartcard_channel_get_type(void) G_GNUC_CONST;
> -
>  G_DEFINE_TYPE(RedSmartcardChannel, red_smartcard_channel, RED_TYPE_CHANNEL)
>  
>  static void
> diff --git a/server/smartcard.h b/server/smartcard.h
> index 11d334f1..f0b4fa44 100644
> --- a/server/smartcard.h
> +++ b/server/smartcard.h
> @@ -24,17 +24,9 @@
>  #include "char-device.h"
>  #include "red-channel-client.h"
>  
> +SPICE_DECLARE_TYPE(RedCharDeviceSmartcard, red_char_device_smartcard, CHAR_DEVICE_SMARTCARD);
>  #define RED_TYPE_CHAR_DEVICE_SMARTCARD red_char_device_smartcard_get_type()
>  
> -#define RED_CHAR_DEVICE_SMARTCARD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_CHAR_DEVICE_SMARTCARD, RedCharDeviceSmartcard))
> -#define RED_CHAR_DEVICE_SMARTCARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_CHAR_DEVICE_SMARTCARD, RedCharDeviceSmartcardClass))
> -#define RED_IS_CHAR_DEVICE_SMARTCARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_CHAR_DEVICE_SMARTCARD))
> -#define RED_IS_CHAR_DEVICE_SMARTCARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_CHAR_DEVICE_SMARTCARD))
> -#define RED_CHAR_DEVICE_SMARTCARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_CHAR_DEVICE_SMARTCARD, RedCharDeviceSmartcardClass))
> -
> -typedef struct RedCharDeviceSmartcard RedCharDeviceSmartcard;
> -typedef struct RedCharDeviceSmartcardClass RedCharDeviceSmartcardClass;
> -typedef struct RedCharDeviceSmartcardPrivate RedCharDeviceSmartcardPrivate;
>  typedef struct SmartCardChannelClient SmartCardChannelClient;
>  
>  struct RedCharDeviceSmartcard
> @@ -49,8 +41,6 @@ struct RedCharDeviceSmartcardClass
>      RedCharDeviceClass parent_class;
>  };
>  
> -GType red_char_device_smartcard_get_type(void) G_GNUC_CONST;
> -
>  /*
>   * connect to smartcard interface, used by smartcard channel
>   */
> diff --git a/server/spicevmc.c b/server/spicevmc.c
> index 6a6e6202..97a55ad4 100644
> --- a/server/spicevmc.c
> +++ b/server/spicevmc.c
> @@ -44,8 +44,23 @@
>  #define BUF_SIZE (64 * 1024 + 32)
>  #define COMPRESS_THRESHOLD 1000
>  
> -typedef struct RedVmcChannel RedVmcChannel;
> -typedef struct RedVmcChannelClass RedVmcChannelClass;
> +SPICE_DECLARE_TYPE(RedCharDeviceSpiceVmc, red_char_device_spicevmc, CHAR_DEVICE_SPICEVMC);
> +#define RED_TYPE_CHAR_DEVICE_SPICEVMC red_char_device_spicevmc_get_type()
> +
> +SPICE_DECLARE_TYPE(RedVmcChannel, red_vmc_channel, VMC_CHANNEL);
> +#define RED_TYPE_VMC_CHANNEL red_vmc_channel_get_type()
> +
> +SPICE_DECLARE_TYPE(RedVmcChannelPort, red_vmc_channel_port, VMC_CHANNEL_PORT);
> +#define RED_TYPE_VMC_CHANNEL_PORT red_vmc_channel_port_get_type()
> +
> +SPICE_DECLARE_TYPE(VmcChannelClient, vmc_channel_client, VMC_CHANNEL_CLIENT);
> +#define TYPE_VMC_CHANNEL_CLIENT vmc_channel_client_get_type()
> +
> +SPICE_DECLARE_TYPE(RedVmcChannelUsbredir, red_vmc_channel_usbredir, VMC_CHANNEL_USBREDIR);
> +#define RED_TYPE_VMC_CHANNEL_USBREDIR red_vmc_channel_usbredir_get_type()
> +
> +SPICE_DECLARE_TYPE(RedVmcChannelWebdav, red_vmc_channel_webdav, VMC_CHANNEL_WEBDAV);
> +#define RED_TYPE_VMC_CHANNEL_WEBDAV red_vmc_channel_webdav_get_type()
>  
>  typedef struct RedVmcPipeItem {
>      RedPipeItem base;
> @@ -57,22 +72,6 @@ typedef struct RedVmcPipeItem {
>      uint32_t buf_used;
>  } RedVmcPipeItem;
>  
> -#define RED_TYPE_CHAR_DEVICE_SPICEVMC red_char_device_spicevmc_get_type()
> -
> -#define RED_CHAR_DEVICE_SPICEVMC(obj) \
> -    (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_CHAR_DEVICE_SPICEVMC, RedCharDeviceSpiceVmc))
> -#define RED_CHAR_DEVICE_SPICEVMC_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_CHAR_DEVICE_SPICEVMC, RedCharDeviceSpiceVmcClass))
> -#define RED_IS_CHAR_DEVICE_SPICEVMC(obj) \
> -    (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_CHAR_DEVICE_SPICEVMC))
> -#define RED_IS_CHAR_DEVICE_SPICEVMC_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_CHAR_DEVICE_SPICEVMC))
> -#define RED_CHAR_DEVICE_SPICEVMC_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_CHAR_DEVICE_SPICEVMC, RedCharDeviceSpiceVmcClass))
> -
> -typedef struct RedCharDeviceSpiceVmc RedCharDeviceSpiceVmc;
> -typedef struct RedCharDeviceSpiceVmcClass RedCharDeviceSpiceVmcClass;
> -
>  struct RedCharDeviceSpiceVmc {
>      RedCharDevice parent;
>      RedVmcChannel *channel;
> @@ -83,24 +82,12 @@ struct RedCharDeviceSpiceVmcClass
>      RedCharDeviceClass parent_class;
>  };
>  
> -static GType red_char_device_spicevmc_get_type(void) G_GNUC_CONST;
>  static RedCharDevice *red_char_device_spicevmc_new(SpiceCharDeviceInstance *sin,
>                                                     RedsState *reds,
>                                                     RedVmcChannel *channel);
>  
>  G_DEFINE_TYPE(RedCharDeviceSpiceVmc, red_char_device_spicevmc, RED_TYPE_CHAR_DEVICE)
>  
> -#define RED_TYPE_VMC_CHANNEL red_vmc_channel_get_type()
> -
> -#define RED_VMC_CHANNEL(obj) \
> -    (G_TYPE_CHECK_INSTANCE_CAST((obj), RED_TYPE_VMC_CHANNEL, RedVmcChannel))
> -#define RED_VMC_CHANNEL_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_CAST((klass), RED_TYPE_VMC_CHANNEL, RedVmcChannelClass))
> -#define RED_IS_VMC_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), RED_TYPE_VMC_CHANNEL))
> -#define RED_IS_VMC_CHANNEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), RED_TYPE_VMC_CHANNEL))
> -#define RED_VMC_CHANNEL_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS((obj), RED_TYPE_VMC_CHANNEL, RedVmcChannelClass))
> -
>  struct RedVmcChannel
>  {
>      RedChannel parent;
> @@ -124,81 +111,56 @@ struct RedVmcChannelClass
>      RedChannelClass parent_class;
>  };
>  
> -GType red_vmc_channel_get_type(void) G_GNUC_CONST;
> -
>  G_DEFINE_TYPE(RedVmcChannel, red_vmc_channel, RED_TYPE_CHANNEL)
>  
> -#define RED_TYPE_VMC_CHANNEL_USBREDIR red_vmc_channel_usbredir_get_type()
> -typedef struct
> +struct RedVmcChannelUsbredir
>  {
>      RedVmcChannel parent;
> -} RedVmcChannelUsbredir;
> +};
>  
> -typedef struct
> +struct RedVmcChannelUsbredirClass
>  {
>      RedVmcChannelClass parent_class;
> -} RedVmcChannelUsbredirClass;
> +};
>  
> -GType red_vmc_channel_usbredir_get_type(void) G_GNUC_CONST;
>  static void red_vmc_channel_usbredir_init(RedVmcChannelUsbredir *self)
>  {
>  }
>  G_DEFINE_TYPE(RedVmcChannelUsbredir, red_vmc_channel_usbredir, RED_TYPE_VMC_CHANNEL)
>  
>  
> -#define RED_TYPE_VMC_CHANNEL_WEBDAV red_vmc_channel_webdav_get_type()
> -typedef struct
> +struct RedVmcChannelWebdav
>  {
>      RedVmcChannel parent;
> -} RedVmcChannelWebdav;
> +};
>  
> -typedef struct
> +struct RedVmcChannelWebdavClass
>  {
>      RedVmcChannelClass parent_class;
> -} RedVmcChannelWebdavClass;
> +};
>  
> -GType red_vmc_channel_webdav_get_type(void) G_GNUC_CONST;
>  static void red_vmc_channel_webdav_init(RedVmcChannelWebdav *self)
>  {
>  }
>  G_DEFINE_TYPE(RedVmcChannelWebdav, red_vmc_channel_webdav, RED_TYPE_VMC_CHANNEL)
>  
>  
> -#define RED_TYPE_VMC_CHANNEL_PORT red_vmc_channel_port_get_type()
> -typedef struct
> +struct RedVmcChannelPort
>  {
>      RedVmcChannel parent;
> -} RedVmcChannelPort;
> +};
>  
> -typedef struct
> +struct RedVmcChannelPortClass
>  {
>      RedVmcChannelClass parent_class;
> -} RedVmcChannelPortClass;
> +};
>  
> -GType red_vmc_channel_port_get_type(void) G_GNUC_CONST;
>  static void red_vmc_channel_port_init(RedVmcChannelPort *self)
>  {
>  }
>  G_DEFINE_TYPE(RedVmcChannelPort, red_vmc_channel_port, RED_TYPE_VMC_CHANNEL)
>  
>  
> -#define TYPE_VMC_CHANNEL_CLIENT vmc_channel_client_get_type()
> -
> -#define VMC_CHANNEL_CLIENT(obj) \
> -    (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_VMC_CHANNEL_CLIENT, VmcChannelClient))
> -#define VMC_CHANNEL_CLIENT_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_VMC_CHANNEL_CLIENT, VmcChannelClientClass))
> -#define COMMON_IS_GRAPHICS_CHANNEL_CLIENT(obj) \
> -    (G_TYPE_CHECK_INSTANCE_TYPE((obj), TYPE_VMC_CHANNEL_CLIENT))
> -#define COMMON_IS_GRAPHICS_CHANNEL_CLIENT_CLASS(klass) \
> -    (G_TYPE_CHECK_CLASS_TYPE((klass), TYPE_VMC_CHANNEL_CLIENT))
> -#define VMC_CHANNEL_CLIENT_GET_CLASS(obj) \
> -    (G_TYPE_INSTANCE_GET_CLASS((obj), TYPE_VMC_CHANNEL_CLIENT, VmcChannelClientClass))
> -
> -typedef struct VmcChannelClient VmcChannelClient;
> -typedef struct VmcChannelClientClass VmcChannelClientClass;
> -typedef struct VmcChannelClientPrivate VmcChannelClientPrivate;
> -
>  struct VmcChannelClient {
>      RedChannelClient parent;
>  };
> @@ -207,8 +169,6 @@ struct VmcChannelClientClass {
>      RedChannelClientClass parent_class;
>  };
>  
> -GType vmc_channel_client_get_type(void) G_GNUC_CONST;
> -
>  G_DEFINE_TYPE(VmcChannelClient, vmc_channel_client, RED_TYPE_CHANNEL_CLIENT)
>  
>  static RedChannelClient *
> -- 
> 2.14.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20171121/2e2f43a6/attachment.sig>


More information about the Spice-devel mailing list