[Spice-devel] [spice-server] Remove duplicate typedef

Jonathon Jongsma jjongsma at redhat.com
Wed May 25 14:18:31 UTC 2016


Not terrible, but I think if we did use this approach there should be a
prominent comment in red-types.h explaining why this seemingly-arbitrary set of
types are defined there.


On Wed, 2016-05-25 at 11:43 +0200, Christophe Fergeau wrote:
> This fixes compilation on el6. This is achieved by moving the most problematic
> typedef to a red-types.h header. Ideally, it will go away once we have put
> some
> order in the header content/API/... For example, StreamAgent would be better
> as
> an opaque type.
> ---
> 
> Here is my take on this.
> 
> Christophe
> 
>  server/Makefile.am           |  1 +
>  server/image-cache.h         |  4 +---
>  server/main-channel-client.h |  7 ++-----
>  server/main-channel.c        |  1 +
>  server/main-channel.h        |  2 +-
>  server/red-channel.h         |  2 +-
>  server/red-types.h           | 26 ++++++++++++++++++++++++++
>  server/red-worker.c          |  2 +-
>  server/reds.c                |  1 +
>  server/sound.c               |  1 +
>  server/stream.c              |  3 ++-
>  server/stream.h              |  3 ---
>  12 files changed, 38 insertions(+), 15 deletions(-)
>  create mode 100644 server/red-types.h
> 
> diff --git a/server/Makefile.am b/server/Makefile.am
> index cca3b9b..708940d 100644
> --- a/server/Makefile.am
> +++ b/server/Makefile.am
> @@ -148,6 +148,7 @@ libserver_la_SOURCES =				\
>  	display-limits.h			\
>  	dcc-encoders.c					\
>  	dcc-encoders.h					\
> +	red-types.h				\
>  	$(NULL)
>  
>  if HAVE_SMARTCARD
> diff --git a/server/image-cache.h b/server/image-cache.h
> index 38a318e..fffd82d 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;
> +#include "red-types.h"
>  
>  typedef struct ImageCacheItem {
>      RingItem lru_link;
> diff --git a/server/main-channel-client.h b/server/main-channel-client.h
> index c74f847..6ce3f34 100644
> --- a/server/main-channel-client.h
> +++ b/server/main-channel-client.h
> @@ -17,11 +17,8 @@
>  #ifndef __MAIN_CHANNEL_CLIENT_H__
>  #define __MAIN_CHANNEL_CLIENT_H__
>  
> -#include "red-channel.h"
> -
> -/* FIXME: remove extra MainChannel typedef when possible */
> -typedef struct MainChannel MainChannel;
> -typedef struct MainChannelClient MainChannelClient;
> +#include "main-channel.h"
> +#include "red-types.h"
>  
>  MainChannelClient *main_channel_client_create(MainChannel *main_chan,
> RedClient *client,
>                                                RedsStream *stream, uint32_t
> connection_id,
> diff --git a/server/main-channel.c b/server/main-channel.c
> index 1a18200..daa6b5d 100644
> --- a/server/main-channel.c
> +++ b/server/main-channel.c
> @@ -23,6 +23,7 @@
>  
>  #include "red-common.h"
>  #include "main-channel.h"
> +#include "main-channel-client.h"
>  #include "reds.h"
>  
>  int main_channel_is_connected(MainChannel *main_chan)
> diff --git a/server/main-channel.h b/server/main-channel.h
> index 868a14a..d4b63f6 100644
> --- a/server/main-channel.h
> +++ b/server/main-channel.h
> @@ -23,7 +23,7 @@
>  #include <common/marshaller.h>
>  
>  #include "red-channel.h"
> -#include "main-channel-client.h"
> +#include "red-types.h"
>  
>  // TODO: Defines used to calculate receive buffer size, and also by reds.c
>  // other options: is to make a reds_main_consts.h, to duplicate defines.
> diff --git a/server/red-channel.h b/server/red-channel.h
> index 57ea660..c71927a 100644
> --- a/server/red-channel.h
> +++ b/server/red-channel.h
> @@ -33,6 +33,7 @@
>  #include "reds-stream.h"
>  #include "stat.h"
>  #include "red-pipe-item.h"
> +#include "red-types.h"
>  
>  #define MAX_SEND_BUFS 1000
>  #define CLIENT_ACK_WINDOW 20
> @@ -131,7 +132,6 @@ typedef struct OutgoingHandler {
>  typedef struct RedChannel RedChannel;
>  typedef struct RedChannelClient RedChannelClient;
>  typedef struct RedClient RedClient;
> -typedef struct MainChannelClient MainChannelClient;
>  
>  /* Messages handled by red_channel
>   * SET_ACK - sent to client on channel connection
> diff --git a/server/red-types.h b/server/red-types.h
> new file mode 100644
> index 0000000..a920074
> --- /dev/null
> +++ b/server/red-types.h
> @@ -0,0 +1,26 @@
> +/*
> +    Copyright (C) 2016 Red Hat, Inc.
> +
> +   This library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   This library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with this library; if not, see <http://www.gnu.org/licenses/
> >.
> +*/
> +
> +#ifndef _H_RED_TYPES
> +#define _H_RED_TYPES
> +
> +typedef struct MainChannelClient MainChannelClient;
> +typedef struct DisplayChannelClient DisplayChannelClient;
> +typedef struct DisplayChannel DisplayChannel;
> +typedef struct Drawable Drawable;
> +
> +#endif
> diff --git a/server/red-worker.c b/server/red-worker.c
> index 0c945c1..63c0d00 100644
> --- a/server/red-worker.c
> +++ b/server/red-worker.c
> @@ -45,8 +45,8 @@
>  #include <common/ring.h>
>  
>  #include "display-channel.h"
> +#include "main-channel-client.h"
>  #include "stream.h"
> -
>  #include "spice.h"
>  #include "red-worker.h"
>  #include "cursor-channel.h"
> diff --git a/server/reds.c b/server/reds.c
> index 5c0f9b6..ff51598 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -57,6 +57,7 @@
>  #include "agent-msg-filter.h"
>  #include "inputs-channel.h"
>  #include "main-channel.h"
> +#include "main-channel-client.h"
>  #include "red-qxl.h"
>  #include "main-dispatcher.h"
>  #include "sound.h"
> diff --git a/server/sound.c b/server/sound.c
> index 8335101..3e6eec4 100644
> --- a/server/sound.c
> +++ b/server/sound.c
> @@ -32,6 +32,7 @@
>  #include "spice.h"
>  #include "red-common.h"
>  #include "main-channel.h"
> +#include "main-channel-client.h"
>  #include "reds.h"
>  #include "red-qxl.h"
>  #include "sound.h"
> diff --git a/server/stream.c b/server/stream.c
> index 2aa13d1..3cf50ed 100644
> --- a/server/stream.c
> +++ b/server/stream.c
> @@ -18,8 +18,9 @@
>  #include <config.h>
>  #endif
>  
> -#include "stream.h"
>  #include "display-channel.h"
> +#include "main-channel-client.h"
> +#include "stream.h"
>  
>  #define FPS_TEST_INTERVAL 1
>  #define FOREACH_STREAMS(display, item)                  \
> diff --git a/server/stream.h b/server/stream.h
> index 715f920..80dc60f 100644
> --- a/server/stream.h
> +++ b/server/stream.h
> @@ -42,9 +42,6 @@
>  #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 Stream Stream;
>  
>  typedef struct RedStreamActivateReportItem {


More information about the Spice-devel mailing list