patch 9.0.0119: tiny chance that creating a backup file fails
Problem: Tiny chance that creating a backup file fails.
Solution: Check for EEXIST error. (Ken Takata, closes #10821)
diff --git a/src/bufwrite.c b/src/bufwrite.c
index 8db4266..d7c3034 100644
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -1208,14 +1208,22 @@
// First find a file name that doesn't exist yet (use some
// arbitrary numbers).
STRCPY(IObuff, fname);
+ fd = -1;
for (i = 4913; ; i += 123)
{
sprintf((char *)gettail(IObuff), "%d", i);
if (mch_lstat((char *)IObuff, &st) < 0)
- break;
- }
- fd = mch_open((char *)IObuff,
+ {
+ fd = mch_open((char *)IObuff,
O_CREAT|O_WRONLY|O_EXCL|O_NOFOLLOW, perm);
+ if (fd < 0 && errno == EEXIST)
+ // If the same file name is created by another
+ // process between lstat() and open(), find another
+ // name.
+ continue;
+ break;
+ }
+ }
if (fd < 0) // can't write in directory
backup_copy = TRUE;
else