From 7347caeb9d902d3fca2c11f69a55a3e578d93bfe Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 20 Apr 2022 19:34:57 -0700 Subject: [PATCH] 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 --- ChangeLog | 5 +++++ lib/backupfile.c | 7 +++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4b39a6a443..cd16bbe0cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2022-04-20 Paul Eggert + 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 + gettime-res: more-robust sampling * lib/gettime-res.c (gettime_res): If adjacent timestamps are identical search for a differing timestamp. Also, stop collecting 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)) -- 2.35.1