|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
From b533ed36a5ca33ba718ad37b18d1aa175f232d03 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:11:47 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
Subject: [PATCH] install: use symlink_atomic() instead of unlink()+symlink()
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
when force creating a symlink
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
(cherry picked from commit 1f8c46040e824d7367c2f013de13c87d53f249dc)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
src/shared/install.c | 27 ++++++++-------------------
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
1 file changed, 8 insertions(+), 19 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 0f49f2a9..f0d3d1b7 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 |
@@ -603,13 +603,9 @@ int unit_file_mask(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
continue;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
if (force) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- unlink(path);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (symlink("/dev/null", path) >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ if (symlink_atomic("/dev/null", path) >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL);
|
|
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 |
@@ -770,13 +766,9 @@ int unit_file_link(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
continue;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
if (force) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- unlink(path);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (symlink(*i, path) >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ if (symlink_atomic(*i, path) >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, *i);
|
|
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 |
@@ -1172,17 +1164,14 @@ static int create_symlink(
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
if (!force)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
return -EEXIST;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- r = unlink(new_path);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- if (r < 0 && errno != ENOENT)
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ r = symlink_atomic(old_path, new_path);
|
|
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 (symlink(old_path, new_path) >= 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- add_file_change(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ add_file_change(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path);
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
- return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
+ return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
|
|
Zbigniew Jędrzejewski-Szmek |
5509c0 |
static int install_info_symlink_alias(
|