summaryrefslogtreecommitdiff
path: root/src/udev
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2015-01-10 01:11:54 +0100
committerTom Gundersen <teg@jklm.no>2015-01-12 18:19:16 +0100
commit9a4b012e43f23516373bf398dd9a458439d19939 (patch)
treeafa55f4af80007a118f07ae42c928b923876157b /src/udev
parent9c39eb5c88dbca491e97a44acde43f88ef33a236 (diff)
udev: link_config - modernize a bit and fix leakes
Not all of the link_config struct was getting freed.
Diffstat (limited to 'src/udev')
-rw-r--r--src/udev/net/link-config.c86
1 files changed, 51 insertions, 35 deletions
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index bf24f6a7f..ad5b95635 100644
--- a/src/udev/net/link-config.c
+++ b/src/udev/net/link-config.c
@@ -63,49 +63,41 @@ static const char* const link_dirs[] = {
#endif
NULL};
-DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
-#define _cleanup_link_config_ctx_free_ _cleanup_(link_config_ctx_freep)
-
-int link_config_ctx_new(link_config_ctx **ret) {
- _cleanup_link_config_ctx_free_ link_config_ctx *ctx = NULL;
-
- if (!ret)
- return -EINVAL;
-
- ctx = new0(link_config_ctx, 1);
- if (!ctx)
- return -ENOMEM;
-
- LIST_HEAD_INIT(ctx->links);
-
- ctx->ethtool_fd = -1;
-
- ctx->enable_name_policy = true;
-
- *ret = ctx;
- ctx = NULL;
+static void link_config_free(link_config *link) {
+ if (!link)
+ return;
- return 0;
+ free(link->filename);
+
+ free(link->match_mac);
+ free(link->match_path);
+ free(link->match_driver);
+ free(link->match_type);
+ free(link->match_name);
+ free(link->match_host);
+ free(link->match_virt);
+ free(link->match_kernel);
+ free(link->match_arch);
+
+ free(link->description);
+ free(link->mac);
+ free(link->name_policy);
+ free(link->name);
+ free(link->alias);
+
+ free(link);
}
+DEFINE_TRIVIAL_CLEANUP_FUNC(link_config*, link_config_free);
+
static void link_configs_free(link_config_ctx *ctx) {
link_config *link, *link_next;
if (!ctx)
return;
- LIST_FOREACH_SAFE(links, link, link_next, ctx->links) {
- free(link->filename);
- free(link->name);
- free(link->match_path);
- free(link->match_driver);
- free(link->match_type);
- free(link->description);
- free(link->alias);
- free(link->name_policy);
-
- free(link);
- }
+ LIST_FOREACH_SAFE(links, link, link_next, ctx->links)
+ link_config_free(link);
}
void link_config_ctx_free(link_config_ctx *ctx) {
@@ -123,8 +115,32 @@ void link_config_ctx_free(link_config_ctx *ctx) {
return;
}
+DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
+
+int link_config_ctx_new(link_config_ctx **ret) {
+ _cleanup_(link_config_ctx_freep) link_config_ctx *ctx = NULL;
+
+ if (!ret)
+ return -EINVAL;
+
+ ctx = new0(link_config_ctx, 1);
+ if (!ctx)
+ return -ENOMEM;
+
+ LIST_HEAD_INIT(ctx->links);
+
+ ctx->ethtool_fd = -1;
+
+ ctx->enable_name_policy = true;
+
+ *ret = ctx;
+ ctx = NULL;
+
+ return 0;
+}
+
static int load_link(link_config_ctx *ctx, const char *filename) {
- _cleanup_free_ link_config *link = NULL;
+ _cleanup_(link_config_freep) link_config *link = NULL;
_cleanup_fclose_ FILE *file = NULL;
int r;