From: RĂ©mi Denis-Courmont Date: Sat, 19 Jun 2010 01:34:46 +0000 (+0300) Subject: Avoid anonymous compound in add_shortcut (fixes: #3742) X-Git-Tag: 1.2.0-pre1~6114 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=6b49f68da9e956c0397dab0f4588e33940e84036;p=vlc Avoid anonymous compound in add_shortcut (fixes: #3742) --- 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; }