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:
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,