nano

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

commit f7682730bd669fe34bc51a48a21f008dbea009d8
parent 5f90e067f131f4d83f4fe9b365b51e462b8b2b31
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Wed, 15 Jul 2020 10:05:21 +0200

files: make a backup only when requested, not an unrequested failsafe one

After thinking about it, I don't like it that nano makes an unrequested
failsafe backup: in the vast, vast majority of cases it is a waste both
of time and of disk wear.  If the user is worried about data loss, they
can use --backup.  The fsync() after writing out the buffer (added in
commit a84cdaaa) already reduces the chances on data loss somewhat.

Diffstat:
Msrc/files.c | 16+---------------
1 file changed, 1 insertion(+), 15 deletions(-)

diff --git a/src/files.c b/src/files.c @@ -1605,7 +1605,6 @@ bool backup_file(char *realname, char **backupname) statusbar(_("Making backup...")); - if (ISSET(MAKE_BACKUP)) { /* If no backup directory was specified, we make a simple backup * by appending a tilde to the original file name. Otherwise, * we create a numbered backup in the specified directory. */ @@ -1652,12 +1651,6 @@ bool backup_file(char *realname, char **backupname) /* Create the backup file (or truncate the existing one). */ backup_fd = open(*backupname, backup_cflags, S_IRUSR|S_IWUSR); - } else { - *backupname = charalloc(strlen(realname) + 8); - sprintf(*backupname, "%s~XXXXXX", realname); - - backup_fd = mkstemp(*backupname); - } retry_backup: if (backup_fd >= 0) @@ -1718,11 +1711,9 @@ bool backup_file(char *realname, char **backupname) unlink(*backupname); free(*backupname); - if (ISSET(MAKE_BACKUP)) { warn_and_briefly_pause(_("Cannot make regular backup")); warn_and_briefly_pause(_("Trying again in your home directory")); currmenu = MMOST; - } *backupname = charalloc(strlen(homedir) + strlen(tail(realname)) + 9); sprintf(*backupname, "%s/%s~XXXXXX", homedir, tail(realname)); @@ -1797,7 +1788,7 @@ bool write_file(const char *name, FILE *thefile, bool tmp, /* When the user requested a backup, we do this only if the file exists and * isn't temporary AND the file has not been modified by someone else since * we opened it (or we are appending/prepending or writing a selection). */ - if (is_existing_file && !ISSET(RESTRICTED) && openfile->statinfo && + if (ISSET(MAKE_BACKUP) && is_existing_file && openfile->statinfo && (openfile->statinfo->st_mtime == st.st_mtime || method != OVERWRITE || openfile->mark)) { if (!backup_file(realname, &backupname)) @@ -1971,11 +1962,6 @@ bool write_file(const char *name, FILE *thefile, bool tmp, goto cleanup_and_exit; } - /* If no backups were requested, delete the temporary backup file - * that was created just to ensure a failsafe replacement. */ - if (!ISSET(MAKE_BACKUP) && backupname != NULL) - unlink(backupname); - /* When having written an entire buffer, update some administrivia. */ if (fullbuffer && method == OVERWRITE && !tmp) { /* If the filename was changed, write a new lockfile when needed,