bug-texinfo
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: install-info can "corrupt" dir file if interrupted.


From: Gavin Smith
Subject: Re: install-info can "corrupt" dir file if interrupted.
Date: Sat, 3 Dec 2022 19:19:50 +0000

On Sat, Dec 03, 2022 at 08:54:42PM +0200, Eli Zaretskii wrote:
> I suggest the other way around: try renaming, and if it fails, remove and
> retry renaming.  This way, if remove fails, it fails the entire renaming
> operation, and you don't need to deal with remove failing due to unrelated
> reasons.

I've done this:

--- a/install-info/install-info.c
+++ b/install-info/install-info.c
@@ -1054,7 +1054,20 @@ output_dirfile (char *dirfile, int dir_nlines, struct 
line_data *dir_lines,
   /* Update dir file atomically.  This stops the dir file being corrupted
      if install-info is interrupted. */
   if (rename (tempname, dirfile) == -1)
-    perror (tempname);
+    {
+      /* Try to delete target file and try again.  On some platforms you
+         may not rename to an existing file. */
+      if (remove (dirfile) == -1)
+        {
+          perror (dirfile);
+          remove (tempname);
+        }
+      else if (rename (tempname, dirfile) == -1)
+        {
+          perror (tempname);
+          remove (tempname);
+        }
+    }
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]