summarylogtreecommitdiffstats
path: root/gnulib-backupfile-62607.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnulib-backupfile-62607.patch')
-rw-r--r--gnulib-backupfile-62607.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/gnulib-backupfile-62607.patch b/gnulib-backupfile-62607.patch
new file mode 100644
index 000000000000..53f281269d44
--- /dev/null
+++ b/gnulib-backupfile-62607.patch
@@ -0,0 +1,43 @@
+From 418aa564ebff70c1d118a5d3307a6d0b147ff7a2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
+Date: Mon, 3 Apr 2023 18:06:22 +0100
+Subject: [PATCH] backupfile: fix bug when renaming from subdirectory
+
+* lib/backupfile.c (backup_internal): Ensure we use the
+appropriate offset if operating on a subdirectory,
+i.e., on an updated sdir.
+Fixes https://bugs.gnu.org/62607
+---
+ ChangeLog | 8 ++++++++
+ lib/backupfile.c | 7 ++++---
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/lib/backupfile.c b/lib/backupfile.c
+index 9cca271343..5bcf924414 100644
+--- a/lib/backupfile.c
++++ b/lib/backupfile.c
+@@ -331,7 +331,7 @@ backupfile_internal (int dir_fd, char const *file,
+ return s;
+
+ DIR *dirp = NULL;
+- int sdir = dir_fd;
++ int sdir = -1;
+ idx_t base_max = 0;
+ while (true)
+ {
+@@ -370,9 +370,10 @@ backupfile_internal (int dir_fd, char const *file,
+ if (! rename)
+ break;
+
+- idx_t offset = backup_type == simple_backups ? 0 : base_offset;
++ 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 (sdir, 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))
+--
+2.26.2
+