commit 2f718e11a7ff896eae63cca75b0821ea301f66cf
parent 77da54c6c6ad0caaabaebad3fd437c02f701657c
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Tue, 23 Mar 2021 16:29:03 +0100
files: create a new buffer earlier, so that error messages can be stored
This improves the fix for https://savannah.gnu.org/bugs/?60269,
by not dropping error messages that happen before a buffer is opened.
This basically reverts commit b63c90bf from a year ago, except that
it now always deletes the created buffer when the user does not want
to override the lock file, also when it is the only buffer.
Diffstat:
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/src/files.c b/src/files.c
@@ -373,9 +373,6 @@ bool open_buffer(const char *filename, bool new_one)
{
char *realname;
/* The filename after tilde expansion. */
-#ifndef NANO_TINY
- char *thelocksname = NULL;
-#endif
struct stat fileinfo;
int descriptor = 0;
/* Code 0 means new file, -1 means failure, and else it's the fd. */
@@ -420,23 +417,28 @@ bool open_buffer(const char *filename, bool new_one)
/* When loading into a new buffer, first check the file's path is valid,
* and then (if requested and possible) create a lock file for it. */
- if (new_one && has_valid_path(realname)) {
+ if (new_one) {
+ make_new_buffer();
+
+ if (has_valid_path(realname)) {
#ifndef NANO_TINY
if (ISSET(LOCKING) && !ISSET(VIEW_MODE) && filename[0] != '\0') {
- thelocksname = do_lockfile(realname, TRUE);
+ char *thelocksname = do_lockfile(realname, TRUE);
- /* When not overriding an existing lock, don't open a buffer. */
+ /* When not overriding an existing lock, discard the buffer. */
if (thelocksname == SKIPTHISFILE) {
+#ifdef ENABLE_MULTIBUFFER
+ close_buffer();
+#endif
free(realname);
return FALSE;
- }
+ } else
+ openfile->lock_filename = thelocksname;
+ }
+#endif /* NANO_TINY */
}
-#endif
}
- if (new_one)
- make_new_buffer();
-
/* If we have a filename and are not in NOREAD mode, open the file. */
if (filename[0] != '\0' && !ISSET(NOREAD_MODE))
descriptor = open_file(realname, new_one, &f);
@@ -459,9 +461,6 @@ bool open_buffer(const char *filename, bool new_one)
* and put the cursor at the start of the buffer. */
if (descriptor >= 0 && new_one) {
openfile->filename = mallocstrcpy(openfile->filename, realname);
-#ifndef NANO_TINY
- openfile->lock_filename = thelocksname;
-#endif
openfile->current = openfile->filetop;
openfile->current_x = 0;
openfile->placewewant = 0;
@@ -610,6 +609,9 @@ void close_buffer(void)
/* When just one buffer remains open, show "Exit" in the help lines. */
if (openfile == openfile->next)
exitfunc->desc = exit_tag;
+
+ if (openfile == orphan)
+ openfile = NULL;
}
#endif /* ENABLE_MULTIBUFFER */