summaryrefslogtreecommitdiff
path: root/src/shared/install.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-10-16 19:23:35 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-10-16 23:35:39 -0400
commit3b319885c4febb5f7ea9b5ab31c3395548ed6886 (patch)
treea342cd060e144ed447ecd43b22a7b87068070170 /src/shared/install.c
parent6b430fdb7c0c2c52ea69a7d56f23d739218b13d0 (diff)
tree-wide: introduce free_and_replace helper
It's a common pattern, so add a helper for it. A macro is necessary because a function that takes a pointer to a pointer would be type specific, similarly to cleanup functions. Seems better to use a macro.
Diffstat (limited to 'src/shared/install.c')
-rw-r--r--src/shared/install.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/src/shared/install.c b/src/shared/install.c
index c1ef62b337..f70b3e3dd5 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -1107,11 +1107,7 @@ static int config_parse_default_instance(
if (!unit_instance_is_valid(printed))
return -EINVAL;
- free(i->default_instance);
- i->default_instance = printed;
- printed = NULL;
-
- return 0;
+ return free_and_replace(i->default_instance, printed);
}
static int unit_file_load(
@@ -1357,9 +1353,7 @@ static int install_info_follow(
if (!streq(basename(i->symlink_target), i->name))
return -EXDEV;
- free(i->path);
- i->path = i->symlink_target;
- i->symlink_target = NULL;
+ free_and_replace(i->path, i->symlink_target);
i->type = _UNIT_FILE_TYPE_INVALID;
return unit_file_load_or_readlink(c, i, i->path, root_dir, flags);