nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit fa26889d0305f53dcd58c356090a37285e36a8e5
parent 30011b8525b494baf37824a66c01f19797454fcd
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Sun,  9 Feb 2020 16:45:23 +0100

tweaks: change a function to return the name of the lock file on success

This makes it possible to fix a small bug in the next commit.

Diffstat:
Msrc/files.c | 24+++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/files.c b/src/files.c @@ -32,6 +32,7 @@ #ifndef NANO_TINY #define LOCKSIZE 1024 +#define SKIPTHISFILE (char *)-1 const char *locking_prefix = "."; const char *locking_suffix = ".swp"; /* Prefix and suffix for the name of the vim-style lock file. */ @@ -248,7 +249,7 @@ bool write_lockfile(const char *lockfilename, const char *filename, bool modifie /* Deal with lockfiles. Return -1 on refusing to override the lockfile, * and 1 on successfully creating it; 0 means we were not successful in * creating the lockfile but we should continue to load the file. */ -int do_lockfile(const char *filename, bool ask_the_user) +char *do_lockfile(const char *filename, bool ask_the_user) { char *namecopy = copy_of(filename); char *secondcopy = copy_of(filename); @@ -274,7 +275,7 @@ int do_lockfile(const char *filename, bool ask_the_user) statusline(ALERT, _("Error opening lock file %s: %s"), lockfilename, strerror(errno)); free(lockfilename); - return 0; + return NULL; } lockbuf = charalloc(LOCKSIZE); @@ -289,7 +290,7 @@ int do_lockfile(const char *filename, bool ask_the_user) statusline(ALERT, _("Bad lock file is ignored: %s"), lockfilename); free(lockfilename); free(lockbuf); - return 0; + return NULL; } strncpy(lockprog, &lockbuf[2], 10); @@ -339,17 +340,15 @@ int do_lockfile(const char *filename, bool ask_the_user) if (choice < 1) { free(lockfilename); wipe_statusbar(); - return -1; + return SKIPTHISFILE; } } - if (write_lockfile(lockfilename, filename, FALSE)) { - openfile->lock_filename = lockfilename; - return 1; - } + if (write_lockfile(lockfilename, filename, FALSE)) + return lockfilename; free(lockfilename); - return 0; + return NULL; } /* Perform a stat call on the given filename, allocating a stat struct @@ -421,15 +420,18 @@ bool open_buffer(const char *filename, bool new_buffer) if (has_valid_path(realname)) { #ifndef NANO_TINY if (ISSET(LOCKING) && !ISSET(VIEW_MODE) && filename[0] != '\0') { + char *thelocksname = do_lockfile(realname, TRUE); + /* When not overriding an existing lock, discard the buffer. */ - if (do_lockfile(realname, TRUE) < 0) { + if (thelocksname == SKIPTHISFILE) { #ifdef ENABLE_MULTIBUFFER if (openfile != openfile->next) close_buffer(); #endif free(realname); return FALSE; - } + } else + openfile->lock_filename = thelocksname; } #endif /* !NANO_TINY */ }