Zbigniew Jędrzejewski-Szmek 5509c0
From f906059875069ef0b72e54581d78fe4e28b375a3 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 5509c0
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek 5509c0
Date: Tue, 17 Jun 2014 00:10:54 +0200
Zbigniew Jędrzejewski-Szmek 5509c0
Subject: [PATCH] install: various modernizations
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
(cherry picked from commit 1dacfd2ad643019f41fb979f5a8c144172911f85)
Zbigniew Jędrzejewski-Szmek 5509c0
---
Zbigniew Jędrzejewski-Szmek 5509c0
 src/shared/install.c | 47 ++++++++++++++++++++++-------------------------
Zbigniew Jędrzejewski-Szmek 5509c0
 1 file changed, 22 insertions(+), 25 deletions(-)
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/src/shared/install.c b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 5509c0
index 40dc7beb..0f49f2a9 100644
Zbigniew Jędrzejewski-Szmek 5509c0
--- a/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -287,30 +287,31 @@ static int remove_marked_symlinks_fd(
Zbigniew Jędrzejewski-Szmek 5509c0
                                 set_get(remove_symlinks_to, dest) ||
Zbigniew Jędrzejewski-Szmek 5509c0
                                 set_get(remove_symlinks_to, basename(dest));
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                        if (found) {
Zbigniew Jędrzejewski-Szmek 5509c0
+                        if (!found)
Zbigniew Jędrzejewski-Szmek 5509c0
+                                continue;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                if (unlink(p) < 0 && errno != ENOENT) {
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                        if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
-                                                r = -errno;
Zbigniew Jędrzejewski-Szmek 5509c0
-                                        continue;
Zbigniew Jędrzejewski-Szmek 5509c0
-                                }
Zbigniew Jędrzejewski-Szmek 5509c0
+                        if (unlink(p) < 0 && errno != ENOENT) {
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+                                if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        r = -errno;
Zbigniew Jędrzejewski-Szmek 5509c0
+                                continue;
Zbigniew Jędrzejewski-Szmek 5509c0
+                        }
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                rmdir_parents(p, config_path);
Zbigniew Jędrzejewski-Szmek 5509c0
+                        rmdir_parents(p, config_path);
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                path_kill_slashes(p);
Zbigniew Jędrzejewski-Szmek 5509c0
+                        path_kill_slashes(p);
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
Zbigniew Jędrzejewski-Szmek 5509c0
+                        add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                if (!set_get(remove_symlinks_to, p)) {
Zbigniew Jędrzejewski-Szmek 5509c0
+                        if (!set_get(remove_symlinks_to, p)) {
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                                        q = mark_symlink_for_removal(&remove_symlinks_to, p);
Zbigniew Jędrzejewski-Szmek 5509c0
-                                        if (q < 0) {
Zbigniew Jędrzejewski-Szmek 5509c0
-                                                if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
-                                                        r = q;
Zbigniew Jędrzejewski-Szmek 5509c0
-                                        } else
Zbigniew Jędrzejewski-Szmek 5509c0
-                                                *deleted = true;
Zbigniew Jędrzejewski-Szmek 5509c0
-                                }
Zbigniew Jędrzejewski-Szmek 5509c0
+                                q = mark_symlink_for_removal(&remove_symlinks_to, p);
Zbigniew Jędrzejewski-Szmek 5509c0
+                                if (q < 0) {
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
+                                                r = q;
Zbigniew Jędrzejewski-Szmek 5509c0
+                                } else
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        *deleted = true;
Zbigniew Jędrzejewski-Szmek 5509c0
                         }
Zbigniew Jędrzejewski-Szmek 5509c0
                 }
Zbigniew Jędrzejewski-Szmek 5509c0
         }
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -417,10 +418,8 @@ static int find_symlinks_fd(
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                         /* This will close nfd, regardless whether it succeeds or not */
Zbigniew Jędrzejewski-Szmek 5509c0
                         q = find_symlinks_fd(name, nfd, p, config_path, same_name_link);
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (q > 0)
Zbigniew Jędrzejewski-Szmek 5509c0
                                 return 1;
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
                                 r = q;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -595,7 +594,6 @@ int unit_file_mask(
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                 if (symlink("/dev/null", path) >= 0) {
Zbigniew Jędrzejewski-Szmek 5509c0
                         add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null");
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                         continue;
Zbigniew Jędrzejewski-Szmek 5509c0
                 }
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -762,7 +760,6 @@ int unit_file_link(
Zbigniew Jędrzejewski-Szmek 5509c0
                         _cleanup_free_ char *dest = NULL;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                         q = readlink_and_make_absolute(path, &dest);
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (q < 0 && errno != ENOENT) {
Zbigniew Jędrzejewski-Szmek 5509c0
                                 if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
                                         r = q;
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -1302,8 +1299,8 @@ static int install_info_symlink_link(
Zbigniew Jędrzejewski-Szmek 5509c0
                 UnitFileChange **changes,
Zbigniew Jędrzejewski-Szmek 5509c0
                 unsigned *n_changes) {
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-        int r;
Zbigniew Jędrzejewski-Szmek 5509c0
         _cleanup_free_ char *path = NULL;
Zbigniew Jędrzejewski-Szmek 5509c0
+        int r;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
         assert(i);
Zbigniew Jędrzejewski-Szmek 5509c0
         assert(paths);
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -1314,11 +1311,11 @@ static int install_info_symlink_link(
Zbigniew Jędrzejewski-Szmek 5509c0
         if (r != 0)
Zbigniew Jędrzejewski-Szmek 5509c0
                 return r;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-        if (asprintf(&path, "%s/%s", config_path, i->name) < 0)
Zbigniew Jędrzejewski-Szmek 5509c0
+        path = strjoin(config_path, "/", i->name, NULL);
Zbigniew Jędrzejewski-Szmek 5509c0
+        if (!path)
Zbigniew Jędrzejewski-Szmek 5509c0
                 return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-        r = create_symlink(i->path, path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 5509c0
-        return r;
Zbigniew Jędrzejewski-Szmek 5509c0
+        return create_symlink(i->path, path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 5509c0
 }
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
 static int install_info_apply(