]> git.sesse.net Git - vlc/commitdiff
Avoid anonymous compound in add_shortcut (fixes: #3742)
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 19 Jun 2010 01:34:46 +0000 (04:34 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 19 Jun 2010 01:35:49 +0000 (04:35 +0300)
include/vlc_plugin.h
src/modules/entry.c

index c1a150ecbc1b180530d13a5af353b6b70aaff9a9..3f51b6e71b323bbedfa1b7c9958eb4b38020fddd 100644 (file)
@@ -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, \
index 2e8b3c2977d82b8509d9cea5ebbe97a07636a725..80f2802799fb6f8b0f8d9ce1df2dc73994c9af17 100644 (file)
@@ -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;
         }