fs-util: rename conservative_rename() -> conservative_renameat()
And this introduces conservative_rename() which does not take dirfd.
This commit is contained in:
+1
-1
@@ -1614,7 +1614,7 @@ int path_is_encrypted(const char *path) {
|
||||
return blockdev_is_encrypted(p, 10 /* safety net: maximum recursion depth */);
|
||||
}
|
||||
|
||||
int conservative_rename(
|
||||
int conservative_renameat(
|
||||
int olddirfd, const char *oldpath,
|
||||
int newdirfd, const char *newpath) {
|
||||
|
||||
|
||||
+4
-1
@@ -143,4 +143,7 @@ int open_parent(const char *path, int flags, mode_t mode);
|
||||
|
||||
int path_is_encrypted(const char *path);
|
||||
|
||||
int conservative_rename(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
|
||||
int conservative_renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
|
||||
static inline int conservative_rename(const char *oldpath, const char *newpath) {
|
||||
return conservative_renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath);
|
||||
}
|
||||
|
||||
@@ -360,7 +360,7 @@ int manager_write_resolv_conf(Manager *m) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = conservative_rename(AT_FDCWD, temp_path_stub, AT_FDCWD, PRIVATE_STUB_RESOLV_CONF);
|
||||
r = conservative_rename(temp_path_stub, PRIVATE_STUB_RESOLV_CONF);
|
||||
if (r < 0)
|
||||
log_error_errno(r, "Failed to move new %s into place: %m", PRIVATE_STUB_RESOLV_CONF);
|
||||
|
||||
@@ -370,7 +370,7 @@ int manager_write_resolv_conf(Manager *m) {
|
||||
log_error_errno(r, "Failed to symlink %s: %m", PRIVATE_STUB_RESOLV_CONF);
|
||||
}
|
||||
|
||||
r = conservative_rename(AT_FDCWD, temp_path_uplink, AT_FDCWD, PRIVATE_UPLINK_RESOLV_CONF);
|
||||
r = conservative_rename(temp_path_uplink, PRIVATE_UPLINK_RESOLV_CONF);
|
||||
if (r < 0)
|
||||
log_error_errno(r, "Failed to move new %s into place: %m", PRIVATE_UPLINK_RESOLV_CONF);
|
||||
|
||||
|
||||
@@ -847,37 +847,37 @@ static void test_conservative_rename(void) {
|
||||
|
||||
/* Check that the hardlinked "copy" is detected */
|
||||
assert_se(link(p, q) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
|
||||
/* Check that a manual copy is detected */
|
||||
assert_se(copy_file(p, q, 0, (mode_t) -1, 0, 0, COPY_REFLINK) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
|
||||
/* Check that a manual new writeout is also detected */
|
||||
assert_se(write_string_file(q, "this is a test", WRITE_STRING_FILE_CREATE) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
|
||||
/* Check that a minimally changed version is detected */
|
||||
assert_se(write_string_file(q, "this is a_test", WRITE_STRING_FILE_CREATE) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) > 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) > 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
|
||||
/* Check that this really is new updated version */
|
||||
assert_se(write_string_file(q, "this is a_test", WRITE_STRING_FILE_CREATE) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) == 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
|
||||
/* Make sure we detect extended files */
|
||||
assert_se(write_string_file(q, "this is a_testx", WRITE_STRING_FILE_CREATE) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) > 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) > 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
|
||||
/* Make sure we detect truncated files */
|
||||
assert_se(write_string_file(q, "this is a_test", WRITE_STRING_FILE_CREATE) >= 0);
|
||||
assert_se(conservative_rename(AT_FDCWD, q, AT_FDCWD, p) > 0);
|
||||
assert_se(conservative_renameat(AT_FDCWD, q, AT_FDCWD, p) > 0);
|
||||
assert_se(access(q, F_OK) < 0 && errno == ENOENT);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user