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

Christophe Fergeau cfergeau at redhat.com
Wed May 25 09:43:11 UTC 2016


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 {
-- 
2.7.4



More information about the Spice-devel mailing list