[systemd-commits] 2 commits - src/libsystemd-network src/udev

Tom Gundersen tomegun at kemper.freedesktop.org
Mon Jan 12 09:19:22 PST 2015


 src/libsystemd-network/network-internal.c |   10 +--
 src/udev/net/link-config.c                |   86 +++++++++++++++++-------------
 2 files changed, 55 insertions(+), 41 deletions(-)

New commits:
commit 9a4b012e43f23516373bf398dd9a458439d19939
Author: Tom Gundersen <teg at jklm.no>
Date:   Sat Jan 10 01:11:54 2015 +0100

    udev: link_config - modernize a bit and fix leakes
    
    Not all of the link_config struct was getting freed.

diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index bf24f6a..ad5b956 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;
 

commit 9c39eb5c88dbca491e97a44acde43f88ef33a236
Author: Tom Gundersen <teg at jklm.no>
Date:   Sat Jan 10 00:33:46 2015 +0100

    network-intenal: user _cleanup_ macro in parse_ifname

diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c
index 6852a71..e4a15d0 100644
--- a/src/libsystemd-network/network-internal.c
+++ b/src/libsystemd-network/network-internal.c
@@ -224,7 +224,7 @@ int config_parse_ifalias(const char *unit,
                          void *userdata) {
 
         char **s = data;
-        char *n;
+        _cleanup_free_ char *n = NULL;
 
         assert(filename);
         assert(lvalue);
@@ -238,17 +238,15 @@ int config_parse_ifalias(const char *unit,
         if (!ascii_is_valid(n) || strlen(n) >= IFALIASZ) {
                 log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                            "Interface alias is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
-                free(n);
                 return 0;
         }
 
         free(*s);
-        if (*n)
+        if (*n) {
                 *s = n;
-        else {
-                free(n);
+                n = NULL;
+        } else
                 *s = NULL;
-        }
 
         return 0;
 }



More information about the systemd-commits mailing list