From f7b48981e37eec27327a010296008ffa6c727d68 Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Fri, 23 Oct 2015 10:34:24 +0100 Subject: worker: remove need for WorkerInitData Move code around to declare and place it where it fits better. Acked-by: Frediano Ziglio --- server/reds.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'server/reds.c') diff --git a/server/reds.c b/server/reds.c index 2aea6885..1f6774ef 100644 --- a/server/reds.c +++ b/server/reds.c @@ -3364,6 +3364,46 @@ SPICE_GNUC_VISIBLE SpiceServer *spice_server_new(void) return reds; } +typedef struct RendererInfo { + int id; + const char *name; +} RendererInfo; + +static RendererInfo renderers_info[] = { + {RED_RENDERER_SW, "sw"}, +#ifdef USE_OPENGL + {RED_RENDERER_OGL_PBUF, "oglpbuf"}, + {RED_RENDERER_OGL_PIXMAP, "oglpixmap"}, +#endif + {RED_RENDERER_INVALID, NULL}, +}; + +uint32_t renderers[RED_RENDERER_LAST]; +uint32_t num_renderers = 0; + +static RendererInfo *find_renderer(const char *name) +{ + RendererInfo *inf = renderers_info; + while (inf->name) { + if (strcmp(name, inf->name) == 0) { + return inf; + } + inf++; + } + return NULL; +} + +static int red_add_renderer(const char *name) +{ + RendererInfo *inf; + + if (num_renderers == RED_RENDERER_LAST || !(inf = find_renderer(name))) { + return FALSE; + } + renderers[num_renderers++] = inf->id; + return TRUE; +} + SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *s, SpiceCoreInterface *core) { int ret; @@ -3371,7 +3411,7 @@ SPICE_GNUC_VISIBLE int spice_server_init(SpiceServer *s, SpiceCoreInterface *cor spice_assert(reds == s); ret = do_spice_init(core); if (default_renderer) { - red_dispatcher_add_renderer(default_renderer); + red_add_renderer(default_renderer); } return ret; } @@ -3664,7 +3704,7 @@ SPICE_GNUC_VISIBLE int spice_server_is_server_mouse(SpiceServer *s) SPICE_GNUC_VISIBLE int spice_server_add_renderer(SpiceServer *s, const char *name) { spice_assert(reds == s); - if (!red_dispatcher_add_renderer(name)) { + if (!red_add_renderer(name)) { return -1; } default_renderer = NULL; -- cgit