return 0;
}
-static void kmod_config_free_command(struct kmod_config *config, struct kmod_list *l,
- struct kmod_list **list)
-{
- struct kmod_command *cmd = l->data;
-
- free(cmd);
- *list = kmod_list_remove(l);
-}
-
static int kmod_config_add_options(struct kmod_config *config, const char *modname,
const char *options)
{
return 0;
}
-static void kmod_config_free_options(struct kmod_config *config, struct kmod_list *l)
-{
- struct kmod_options *opt = l->data;
-
- free(opt);
-
- config->options = kmod_list_remove(l);
-}
-
static int kmod_config_add_alias(struct kmod_config *config, const char *name,
const char *modname)
{
return 0;
}
-static void kmod_config_free_alias(struct kmod_config *config, struct kmod_list *l)
-{
- struct kmod_alias *alias = l->data;
-
- free(alias);
-
- config->aliases = kmod_list_remove(l);
-}
-
static int kmod_config_add_blacklist(struct kmod_config *config, const char *modname)
{
_cleanup_free_ char *p;
return 0;
}
-static void kmod_config_free_blacklist(struct kmod_config *config, struct kmod_list *l)
-{
- free(l->data);
- config->blacklists = kmod_list_remove(l);
-}
-
static int kmod_config_add_softdep(struct kmod_config *config, const char *modname,
const char *line)
{
return s;
}
-static void kmod_config_free_softdep(struct kmod_config *config, struct kmod_list *l)
-{
- free(l->data);
- config->softdeps = kmod_list_remove(l);
-}
-
-static void kmod_config_free_weakdep(struct kmod_config *config, struct kmod_list *l)
-{
- free(l->data);
- config->weakdeps = kmod_list_remove(l);
-}
-
static void kcmdline_parse_result(struct kmod_config *config, char *modname, char *param,
char *value)
{
void kmod_config_free(struct kmod_config *config)
{
- while (config->aliases)
- kmod_config_free_alias(config, config->aliases);
-
- while (config->blacklists)
- kmod_config_free_blacklist(config, config->blacklists);
-
- while (config->options)
- kmod_config_free_options(config, config->options);
-
- while (config->install_commands) {
- kmod_config_free_command(config, config->install_commands,
- &config->install_commands);
- }
-
- while (config->remove_commands) {
- kmod_config_free_command(config, config->remove_commands,
- &config->remove_commands);
- }
-
- while (config->softdeps)
- kmod_config_free_softdep(config, config->softdeps);
-
- while (config->weakdeps)
- kmod_config_free_weakdep(config, config->weakdeps);
-
- for (; config->paths != NULL; config->paths = kmod_list_remove(config->paths))
- free(config->paths->data);
-
+ kmod_list_release(config->aliases, free);
+ kmod_list_release(config->blacklists, free);
+ kmod_list_release(config->options, free);
+ kmod_list_release(config->install_commands, free);
+ kmod_list_release(config->remove_commands, free);
+ kmod_list_release(config->softdeps, free);
+ kmod_list_release(config->weakdeps, free);
+ kmod_list_release(config->paths, free);
free(config);
}
return 0;
oom:
- for (; list != NULL; list = kmod_list_remove(list))
- free(list->data);
-
- for (; path_list != NULL; path_list = kmod_list_remove(path_list))
- free(path_list->data);
+ kmod_list_release(list, free);
+ kmod_list_release(path_list, free);
return -ENOMEM;
}
KMOD_EXPORT int kmod_module_unref_list(struct kmod_list *list)
{
- for (; list != NULL; list = kmod_list_remove(list))
- kmod_module_unref(list->data);
+ kmod_list_release(list, kmod_module_unref);
return 0;
}
KMOD_EXPORT void kmod_module_section_free_list(struct kmod_list *list)
{
- while (list) {
- kmod_module_section_free(list->data);
- list = kmod_list_remove(list);
- }
+ kmod_list_release(list, kmod_module_section_free);
}
static struct kmod_elf *kmod_module_get_elf(const struct kmod_module *mod)
KMOD_EXPORT void kmod_module_info_free_list(struct kmod_list *list)
{
- while (list) {
- kmod_module_info_free(list->data);
- list = kmod_list_remove(list);
- }
+ kmod_list_release(list, kmod_module_info_free);
}
struct kmod_module_version {
KMOD_EXPORT void kmod_module_versions_free_list(struct kmod_list *list)
{
- while (list) {
- kmod_module_version_free(list->data);
- list = kmod_list_remove(list);
- }
+ kmod_list_release(list, kmod_module_version_free);
}
struct kmod_module_symbol {
KMOD_EXPORT void kmod_module_symbols_free_list(struct kmod_list *list)
{
- while (list) {
- kmod_module_symbol_free(list->data);
- list = kmod_list_remove(list);
- }
+ kmod_list_release(list, kmod_module_symbol_free);
}
struct kmod_module_dependency_symbol {
KMOD_EXPORT void kmod_module_dependency_symbols_free_list(struct kmod_list *list)
{
- while (list) {
- kmod_module_dependency_symbol_free(list->data);
- list = kmod_list_remove(list);
- }
+ kmod_list_release(list, kmod_module_dependency_symbol_free);
}