[Spice-devel] [PATCH] RFC: Allow multiple typedefs
Frediano Ziglio
fziglio at redhat.com
Wed May 25 08:42:00 UTC 2016
>
> Since recent version of GCC allow multiple typedefs of the same name as
> long as it refers to the same type, we can avoid some of the
> typedef/header issues if we just decide to require a version of gcc that
> allows this behavior. This is also valid according ot the C11 standard.
> I don't know exactly what version of gcc started to support this, and
> it's likely that it won't be backward compatible to e.g. RHEL6. If we
> want to support older compilers we'd have to find a different solution,
> but I present this here for discussion.
I supposed this patch would be better looking than other solutions
however the other solution were all based on not having multiple
type definitions.
Could we use a backported gcc on rhel6 ?
I remember for rhel5 there was an official gcc44 package you
could install to get a newer compiler, maybe we can use it
to support multiple typedefs on rhel6.
Frediano
> ---
> server/dcc-encoders.h | 1 +
> server/display-channel.h | 2 ++
> server/image-cache.h | 2 --
> server/main-channel-client.h | 1 -
> server/stream.h | 3 +--
> 5 files changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
> index 84f9f93..07effa2 100644
> --- a/server/dcc-encoders.h
> +++ b/server/dcc-encoders.h
> @@ -32,6 +32,7 @@
> #endif
> #include "zlib-encoder.h"
>
> +typedef struct DisplayChannelClient DisplayChannelClient;
> typedef struct RedCompressBuf RedCompressBuf;
> typedef struct GlzDrawableInstanceItem GlzDrawableInstanceItem;
> typedef struct RedGlzDrawable RedGlzDrawable;
> diff --git a/server/display-channel.h b/server/display-channel.h
> index 647d8c0..2332acf 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -52,6 +52,7 @@ typedef struct DependItem {
> RingItem ring_item;
> } DependItem;
>
> +typedef struct Drawable Drawable;
> struct Drawable {
> uint8_t refs;
> RingItem surface_list_link;
> @@ -166,6 +167,7 @@ struct _Drawable {
> } u;
> };
>
> +typedef struct DisplayChannel DisplayChannel;
> struct DisplayChannel {
> CommonGraphicsChannel common; // Must be the first thing
> uint32_t bits_unique;
> diff --git a/server/image-cache.h b/server/image-cache.h
> index 38a318e..4a828d0 100644
> --- a/server/image-cache.h
> +++ b/server/image-cache.h
> @@ -23,9 +23,7 @@
> #include <common/canvas_base.h>
> #include <common/ring.h>
>
> -/* FIXME: move back to display-channel.h (once structs are private) */
> typedef struct Drawable Drawable;
> -typedef struct DisplayChannelClient DisplayChannelClient;
>
> typedef struct ImageCacheItem {
> RingItem lru_link;
> diff --git a/server/main-channel-client.h b/server/main-channel-client.h
> index e65a2fb..53b1b98 100644
> --- a/server/main-channel-client.h
> +++ b/server/main-channel-client.h
> @@ -19,7 +19,6 @@
>
> #include "red-channel.h"
>
> -/* FIXME: remove extra MainChannel typedef when possible */
> typedef struct MainChannel MainChannel;
> typedef struct MainChannelClient MainChannelClient;
>
> diff --git a/server/stream.h b/server/stream.h
> index 511d752..b6009bf 100644
> --- a/server/stream.h
> +++ b/server/stream.h
> @@ -42,9 +42,8 @@
> #define RED_STREAM_DEFAULT_LOW_START_BIT_RATE (2.5 * 1024 * 1024) // 2.5Mbps
> #define MAX_FPS 30
>
> -/* move back to display_channel once struct private */
> typedef struct DisplayChannel DisplayChannel;
> -
> +typedef struct DisplayChannelClient DisplayChannelClient;
> typedef struct Stream Stream;
>
> typedef struct RedStreamActivateReportItem {
> --
> 2.4.11
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list