|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
From 06cd279be2d9597ac7e19d19ac2883874d801bc7 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
From: Lennart Poettering <lennart@poettering.net>
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
Date: Mon, 16 Jun 2014 17:19:30 +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 da39f6a63e9ca59bec23cc9d1cb841703bb5ef56)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
src/shared/install.c | 43 ++++++++++++++-----------------------------
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
1 file changed, 14 insertions(+), 29 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 f5620633..115d831d 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 |
@@ -319,7 +319,8 @@ static int remove_marked_symlinks(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
unsigned *n_changes,
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
char** files) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- int fd, r = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ _cleanup_close_ int fd = -1;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ int r = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
bool deleted;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
assert(config_path);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
@@ -347,8 +348,6 @@ static int remove_marked_symlinks(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
r = q;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
} while (deleted);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- safe_close(fd);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
@@ -1830,11 +1829,11 @@ int unit_file_preset(
|
|
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 |
- _cleanup_lookup_paths_free_ LookupPaths paths = {};
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
_cleanup_install_context_done_ InstallContext plus = {}, minus = {};
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- char **i;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- _cleanup_free_ char *config_path = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
_cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ _cleanup_lookup_paths_free_ LookupPaths paths = {};
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ _cleanup_free_ char *config_path = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ char **i;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
int r, q;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
assert(scope >= 0);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
@@ -1861,16 +1860,13 @@ int unit_file_preset(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
r = install_info_add_auto(&plus, *i);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
else
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
r = install_info_add_auto(&minus, *i);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
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 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- r = install_context_mark_for_removal(&minus, &paths, &remove_symlinks_to,
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- config_path, root_dir);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ r = install_context_mark_for_removal(&minus, &paths, &remove_symlinks_to, config_path, root_dir);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- q = remove_marked_symlinks(remove_symlinks_to, config_path,
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- changes, n_changes, files);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ q = remove_marked_symlinks(remove_symlinks_to, config_path, changes, n_changes, files);
|
|
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 |
@@ -1899,8 +1895,6 @@ int unit_file_get_list(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
_cleanup_lookup_paths_free_ LookupPaths paths = {};
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
char **i;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- _cleanup_free_ char *buf = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- _cleanup_closedir_ DIR *d = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
int r;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
assert(scope >= 0);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
@@ -1915,22 +1909,19 @@ int unit_file_get_list(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
STRV_FOREACH(i, paths.unit_path) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ _cleanup_closedir_ DIR *d = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ _cleanup_free_ char *buf = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
const char *units_dir;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- free(buf);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- buf = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (root_dir) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (asprintf(&buf, "%s/%s", root_dir, *i) < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ if (!isempty(root_dir)) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ buf = strjoin(root_dir, "/", *i, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ if (!buf)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
return -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
units_dir = buf;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
} else
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
units_dir = *i;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (d)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- closedir(d);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
d = opendir(units_dir);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
if (!d) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
if (errno == ENOENT)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
@@ -1960,15 +1951,9 @@ int unit_file_get_list(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
if (hashmap_get(h, de->d_name))
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
continue;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- r = dirent_ensure_type(d, de);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (r < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (r == -ENOENT)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- continue;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- return r;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ dirent_ensure_type(d, de);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (de->d_type != DT_LNK && de->d_type != DT_REG)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ if (!IN_SET(de->d_type, DT_LNK, DT_REG))
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
continue;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
f = new0(UnitFileList, 1);
|