chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
da39f6a
)
install: simplify and clarify disabling logic for instanced units
author
Lennart Poettering
<lennart@poettering.net>
Mon, 16 Jun 2014 17:48:31 +0000
(19:48 +0200)
committer
Lennart Poettering
<lennart@poettering.net>
Mon, 16 Jun 2014 23:24:04 +0000
(
01:24
+0200)
src/shared/install.c
patch
|
blob
|
history
diff --git
a/src/shared/install.c
b/src/shared/install.c
index 115d831d25d1e5b8c364f4790c385cafa9fa9995..40dc7bebe8b6a438fe0fbb59dc422186223d13cf 100644
(file)
--- a/
src/shared/install.c
+++ b/
src/shared/install.c
@@
-194,10
+194,10
@@
static int remove_marked_symlinks_fd(
bool *deleted,
UnitFileChange **changes,
unsigned *n_changes,
bool *deleted,
UnitFileChange **changes,
unsigned *n_changes,
- char**
files
) {
+ char**
instance_whitelist
) {
- int r = 0;
_cleanup_closedir_ DIR *d = NULL;
_cleanup_closedir_ DIR *d = NULL;
+ int r = 0;
assert(remove_symlinks_to);
assert(fd >= 0);
assert(remove_symlinks_to);
assert(fd >= 0);
@@
-252,9
+252,8
@@
static int remove_marked_symlinks_fd(
}
/* This will close nfd, regardless whether it succeeds or not */
}
/* This will close nfd, regardless whether it succeeds or not */
- q = remove_marked_symlinks_fd(remove_symlinks_to, nfd, p, config_path, deleted, changes, n_changes, files);
-
- if (r == 0)
+ q = remove_marked_symlinks_fd(remove_symlinks_to, nfd, p, config_path, deleted, changes, n_changes, instance_whitelist);
+ if (q < 0 && r == 0)
r = q;
} else if (de->d_type == DT_LNK) {
r = q;
} else if (de->d_type == DT_LNK) {
@@
-262,6
+261,14
@@
static int remove_marked_symlinks_fd(
int q;
bool found;
int q;
bool found;
+ if (!unit_name_is_valid(de->d_name, TEMPLATE_VALID))
+ continue;
+
+ if (unit_name_is_instance(de->d_name) &&
+ instance_whitelist &&
+ !strv_contains(instance_whitelist, de->d_name))
+ continue;
+
p = path_make_absolute(de->d_name, path);
if (!p)
return -ENOMEM;
p = path_make_absolute(de->d_name, path);
if (!p)
return -ENOMEM;
@@
-280,30
+287,29
@@
static int remove_marked_symlinks_fd(
set_get(remove_symlinks_to, dest) ||
set_get(remove_symlinks_to, basename(dest));
set_get(remove_symlinks_to, dest) ||
set_get(remove_symlinks_to, basename(dest));
- if (unit_name_is_instance(p))
- found = found && strv_contains(files, basename(p));
-
if (found) {
if (unlink(p) < 0 && errno != ENOENT) {
if (r == 0)
r = -errno;
if (found) {
if (unlink(p) < 0 && errno != ENOENT) {
if (r == 0)
r = -errno;
- } else {
- rmdir_parents(p, config_path);
- path_kill_slashes(p);
+ continue;
+ }
+
+ rmdir_parents(p, config_path);
+
+ path_kill_slashes(p);
-
add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
+ add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
-
if (!set_get(remove_symlinks_to, p)) {
+ if (!set_get(remove_symlinks_to, p)) {
- q = mark_symlink_for_removal(&remove_symlinks_to, p);
- if (q < 0) {
- if (r == 0)
- r = q;
- } else
- *deleted = true;
- }
+ q = mark_symlink_for_removal(&remove_symlinks_to, p);
+ if (q < 0) {
+ if (r == 0)
+ r = q;
+ } else
+ *deleted = true;
}
}
}
}
}
}
@@
-317,7
+323,7
@@
static int remove_marked_symlinks(
const char *config_path,
UnitFileChange **changes,
unsigned *n_changes,
const char *config_path,
UnitFileChange **changes,
unsigned *n_changes,
- char**
files
) {
+ char**
instance_whitelist
) {
_cleanup_close_ int fd = -1;
int r = 0;
_cleanup_close_ int fd = -1;
int r = 0;
@@
-343,7
+349,7
@@
static int remove_marked_symlinks(
}
/* This takes possession of cfd and closes it */
}
/* This takes possession of cfd and closes it */
- q = remove_marked_symlinks_fd(remove_symlinks_to, cfd, config_path, config_path, &deleted, changes, n_changes,
files
);
+ q = remove_marked_symlinks_fd(remove_symlinks_to, cfd, config_path, config_path, &deleted, changes, n_changes,
instance_whitelist
);
if (r == 0)
r = q;
} while (deleted);
if (r == 0)
r = q;
} while (deleted);