60 lines
2.1 KiB
Diff
60 lines
2.1 KiB
Diff
diff -Naur coreutils-9.1.orig/lib/backupfile.c coreutils-9.1/lib/backupfile.c
|
|
--- coreutils-9.1.orig/lib/backupfile.c 2022-04-08 11:22:26.000000000 +0000
|
|
+++ coreutils-9.1/lib/backupfile.c 2023-05-04 17:07:20.784911071 +0000
|
|
@@ -332,7 +332,7 @@
|
|
return s;
|
|
|
|
DIR *dirp = NULL;
|
|
- int sdir = AT_FDCWD;
|
|
+ int sdir = -1;
|
|
idx_t base_max = 0;
|
|
while (true)
|
|
{
|
|
@@ -371,10 +371,10 @@
|
|
if (! rename)
|
|
break;
|
|
|
|
- int olddirfd = sdir < 0 ? dir_fd : sdir;
|
|
+ dir_fd = sdir < 0 ? dir_fd : sdir;
|
|
idx_t offset = sdir < 0 ? 0 : base_offset;
|
|
unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE;
|
|
- if (renameatu (olddirfd, file + offset, sdir, s + offset, flags) == 0)
|
|
+ if (renameatu (dir_fd, file + offset, dir_fd, s + offset, flags) == 0)
|
|
break;
|
|
int e = errno;
|
|
if (! (e == EEXIST && extended))
|
|
diff -Naur coreutils-9.1.orig/tests/cp/backup-dir.sh coreutils-9.1/tests/cp/backup-dir.sh
|
|
--- coreutils-9.1.orig/tests/cp/backup-dir.sh 2022-04-08 11:22:18.000000000 +0000
|
|
+++ coreutils-9.1/tests/cp/backup-dir.sh 2023-05-04 17:07:24.851960384 +0000
|
|
@@ -1,5 +1,5 @@
|
|
#!/bin/sh
|
|
-# Ensure that cp -b doesn't back up directories.
|
|
+# Ensure that cp -b handles directories appropriately
|
|
|
|
# Copyright (C) 2006-2022 Free Software Foundation, Inc.
|
|
|
|
@@ -29,4 +29,10 @@
|
|
test -d y/x || fail=1
|
|
test -d y/x~ && fail=1
|
|
|
|
+# Bug 62607.
|
|
+# This would fail to backup using rename, and thus fail to replace the file
|
|
+mkdir -p src/foo dst/foo || framework_failure_
|
|
+touch src/foo/bar dst/foo/bar || framework_failure_
|
|
+cp --recursive --backup src/* dst || fail=1
|
|
+
|
|
Exit $fail
|
|
diff -Naur coreutils-9.1.orig/tests/mv/backup-dir.sh coreutils-9.1/tests/mv/backup-dir.sh
|
|
--- coreutils-9.1.orig/tests/mv/backup-dir.sh 2022-04-08 11:22:18.000000000 +0000
|
|
+++ coreutils-9.1/tests/mv/backup-dir.sh 2023-05-04 17:03:29.593098230 +0000
|
|
@@ -36,4 +36,10 @@
|
|
mv -T --backup=numbered C E/ || fail=1
|
|
mv -T --backup=numbered D E/ || fail=1
|
|
|
|
+# Bug#55029
|
|
+mkdir F && echo 1 >1 && echo 2 >2 && cp 1 F/X && cp 2 X || framework_failure_
|
|
+mv --backup=simple X F/ || fail=1
|
|
+compare 1 F/X~ || fail=1
|
|
+compare 2 F/X || fail=1
|
|
+
|
|
Exit $fail
|