[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