]> Savannah Git Hosting - gnulib.git/commitdiff
backupfile: fix bug when renaming simple backups
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 21 Apr 2022 02:34:57 +0000 (19:34 -0700)
committerBruno Haible <bruno@clisp.org>
Wed, 31 Aug 2022 22:59:46 +0000 (00:59 +0200)
* 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
lib/backupfile.c

index 2f2e751d6fba29481fad50af618b4252e9f4fba7..e99fb5139771e4c74ec5698937f47ad058408a03 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2022-04-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       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
+
 2022-04-16  Paul Eggert  <eggert@cs.ucla.edu>
 
        verify: port to Mac OS 10.7.5
index 06c7e6ea7f1b9088e1802abd0909fcf1c872919c..6f6422b4aefa52ac50f7dd0134e9b520cb3c3212 100644 (file)
@@ -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))