From 6b49f68da9e956c0397dab0f4588e33940e84036 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 19 Jun 2010 04:34:46 +0300 Subject: [PATCH] Avoid anonymous compound in add_shortcut (fixes: #3742) --- include/vlc_plugin.h | 11 +++++++---- src/modules/entry.c | 15 +++++++++------ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/include/vlc_plugin.h b/include/vlc_plugin.h index c1a150ecbc..3f51b6e71b 100644 --- a/include/vlc_plugin.h +++ b/include/vlc_plugin.h @@ -120,8 +120,8 @@ enum vlc_module_properties /** * Current plugin ABI version */ -# define MODULE_SYMBOL 1_2_0b -# define MODULE_SUFFIX "__1_2_0b" +# define MODULE_SYMBOL 1_2_0c +# define MODULE_SUFFIX "__1_2_0c" /***************************************************************************** * Add a few defines. You do not want to read this section. Really. @@ -196,9 +196,12 @@ enum vlc_module_properties goto error; #define add_shortcut( ... ) \ +{ \ + const char *shortcuts[] = { __VA_ARGS__ }; \ if (vlc_module_set (p_submodule, VLC_MODULE_SHORTCUT, \ - sizeof((const char*[]){__VA_ARGS__})/sizeof(const char*), __VA_ARGS__)) \ - goto error; + sizeof(shortcuts)/sizeof(shortcuts[0]), shortcuts)) \ + goto error; \ +} #define set_shortname( shortname ) \ if (vlc_module_set (p_submodule, VLC_MODULE_SHORTNAME, \ diff --git a/src/modules/entry.c b/src/modules/entry.c index 2e8b3c2977..80f2802799 100644 --- a/src/modules/entry.c +++ b/src/modules/entry.c @@ -183,14 +183,17 @@ int vlc_plugin_set (module_t *module, module_config_t *item, int propid, ...) { unsigned i_shortcuts = va_arg (ap, unsigned); unsigned index = module->i_shortcuts; - module->i_shortcuts += i_shortcuts; - - module->pp_shortcuts = realloc (module->pp_shortcuts, sizeof( char ** ) * module->i_shortcuts); - for (; index < module->i_shortcuts; index++) + const char *const *tab = va_arg (ap, const char *const *); + const char **pp = realloc (module->pp_shortcuts, + sizeof (pp[0]) * (index + i_shortcuts)); + if (unlikely(pp == NULL)) { - const char *psz_new = va_arg (ap, const char*); - module->pp_shortcuts[index] = psz_new; + ret = -1; + break; } + module->pp_shortcuts = pp; + module->i_shortcuts = index + i_shortcuts; + memcpy (pp + index, tab, sizeof (pp[0]) * i_shortcuts); break; } -- 2.39.2