- module_t *submodule = malloc (sizeof (*submodule));
- if (unlikely(submodule == NULL))
- return NULL;
-
- /* TODO: replace module/submodules with plugin/modules */
- vlc_gc_init (submodule, vlc_submodule_destruct);
-
- submodule->next = module->submodule;
- module->submodule = submodule;
- module->submodule_count++;
- submodule->parent = module;
- submodule->submodule = NULL;
- submodule->submodule_count = 0;
-
- submodule->pp_shortcuts = xmalloc (sizeof (char **));
- submodule->pp_shortcuts[0] = module->pp_shortcuts[0]; /* object name */
- submodule->i_shortcuts = 1;
-
- submodule->psz_shortname = module->psz_shortname;
- submodule->psz_longname = module->psz_longname;
- submodule->psz_help = NULL;
- submodule->psz_capability = module->psz_capability;
- submodule->i_score = module->i_score;
- submodule->b_builtin = false;
- submodule->b_loaded = false;
- submodule->b_unloadable = false;
- submodule->pf_activate = NULL;
- submodule->pf_deactivate = NULL;
- submodule->p_config = NULL;
- submodule->confsize = 0;
- submodule->i_config_items = 0;
- submodule->i_bool_items = 0;
- /*submodule->handle = unused*/
- /*submodule->psz_filename unused */
- submodule->domain = NULL;
- return submodule;
+ free (module->domain);
+ free (module->psz_filename);
+ for (unsigned i = 0; i < module->i_shortcuts; i++)
+ free (module->pp_shortcuts[i]);
+ free (module->pp_shortcuts);
+ free (module->psz_capability);
+ free (module->psz_help);
+ free (module->psz_longname);
+ free (module->psz_shortname);
+ free (module);