summaryrefslogtreecommitdiff
blob: 33b5f391ab2aa75b89f48a9cd6243b333a2bb48f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
https://src.fedoraproject.org/rpms/coreutils/raw/f672fec4364e71c6e5a30d4026d6bdb7cf332eed/f/gnulib-simple-backup-fix.patch
https://bugs.gnu.org/55029

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

--- 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))