copy: rework copy_file_atomic() to copy the specified file via O_TMPFILE if possible
This commit is contained in:
@@ -240,7 +240,27 @@ static void test_copy_bytes_regular_file(const char *src, bool try_reflink, uint
|
||||
unlink(fn3);
|
||||
}
|
||||
|
||||
static void test_copy_atomic(void) {
|
||||
_cleanup_(rm_rf_physical_and_freep) char *p = NULL;
|
||||
const char *q;
|
||||
int r;
|
||||
|
||||
assert_se(mkdtemp_malloc(NULL, &p) >= 0);
|
||||
|
||||
q = strjoina(p, "/fstab");
|
||||
|
||||
r = copy_file_atomic("/etc/fstab", q, 0644, 0, COPY_REFLINK);
|
||||
if (r == -ENOENT)
|
||||
return;
|
||||
|
||||
assert_se(copy_file_atomic("/etc/fstab", q, 0644, 0, COPY_REFLINK) == -EEXIST);
|
||||
|
||||
assert_se(copy_file_atomic("/etc/fstab", q, 0644, 0, COPY_REPLACE) >= 0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
log_set_max_level(LOG_DEBUG);
|
||||
|
||||
test_copy_file();
|
||||
test_copy_file_fd();
|
||||
test_copy_tree();
|
||||
@@ -251,6 +271,7 @@ int main(int argc, char *argv[]) {
|
||||
test_copy_bytes_regular_file(argv[0], true, 1000);
|
||||
test_copy_bytes_regular_file(argv[0], false, 32000); /* larger than copy buffer size */
|
||||
test_copy_bytes_regular_file(argv[0], true, 32000);
|
||||
test_copy_atomic();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user