From b804e8851c33b68caa5057e809a12333741dfe2e Mon Sep 17 00:00:00 2001 From: Richard Kimberly Heck Date: Wed, 16 Jan 2019 11:13:53 -0500 Subject: [PATCH] Rename emergency file when it is kept. Otherwise, we will ask about it again next time, when the file may have changed. Also, if we crash again, we'll over-write that file, which we may not want to do. See bug #11464. --- src/Buffer.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 6a41b98ce8..06d3eaf1d9 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -4770,6 +4770,32 @@ Buffer::ReadStatus Buffer::loadEmergency() _("&Remove"), _("&Keep")); if (del_emerg == 0) emergencyFile.removeFile(); + else { + // See bug #11464 + FileName newname; + string const ename = emergencyFile.absFileName(); + bool noname = true; + // Surely we can find one in 100 tries? + for (int i = 1; i < 100; ++i) { + newname.set(ename + to_string(i) + ".lyx"); + if (!newname.exists()) { + noname = false; + break; + } + } + if (!noname) { + // renameTo returns true on success. So inverting that + // will give us true if we fail. + noname = !emergencyFile.renameTo(newname); + } + if (noname) { + Alert::warning(_("Can't rename emergency file!"), + _("LyX was unable to rename the emergency file. " + "You should do so manually. Otherwise, you will be" + "asked about it again the next time you try to load" + "this file, and may over-write your own work.")); + } + } return ReadOriginal; } -- 2.39.5