37 lines
1.2 KiB
Diff
37 lines
1.2 KiB
Diff
commit 7347caeb9d902d3fca2c11f69a55a3e578d93bfe
|
|
Author: Paul Eggert <eggert@cs.ucla.edu>
|
|
Date: Wed Apr 20 19:34:57 2022 -0700
|
|
|
|
backupfile: fix bug when renaming simple backups
|
|
|
|
* lib/backupfile.c (backupfile_internal): Fix bug when RENAME
|
|
and when doing simple backups. Problem reported by Steve Ward in:
|
|
https://bugs.gnu.org/55029
|
|
|
|
diff --git a/lib/backupfile.c b/lib/backupfile.c
|
|
index 1e9290a187..d9f465a3e0 100644
|
|
--- a/lib/backupfile.c
|
|
+++ b/lib/backupfile.c
|
|
@@ -332,7 +332,7 @@ backupfile_internal (int dir_fd, char const *file,
|
|
return s;
|
|
|
|
DIR *dirp = NULL;
|
|
- int sdir = AT_FDCWD;
|
|
+ int sdir = dir_fd;
|
|
idx_t base_max = 0;
|
|
while (true)
|
|
{
|
|
@@ -371,10 +371,9 @@ backupfile_internal (int dir_fd, char const *file,
|
|
if (! rename)
|
|
break;
|
|
|
|
- int olddirfd = sdir < 0 ? dir_fd : sdir;
|
|
- idx_t offset = sdir < 0 ? 0 : base_offset;
|
|
+ idx_t offset = backup_type == simple_backups ? 0 : base_offset;
|
|
unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE;
|
|
- if (renameatu (olddirfd, file + offset, sdir, s + offset, flags) == 0)
|
|
+ if (renameatu (sdir, file + offset, sdir, s + offset, flags) == 0)
|
|
break;
|
|
int e = errno;
|
|
if (! (e == EEXIST && extended))
|