From e5af25baef832cfd690481e2071438a60b17fcdf Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Thu, 6 Apr 2006 05:18:23 +0000 Subject: [PATCH] in write_file(), if we can't save the backup file for some reason, at least save the original file, if possible, since that's better than saving nothing git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3355 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 3 +++ src/files.c | 20 ++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5f6fc867..dac25e88 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,9 @@ CVS code - write_file() - Don't free backupname before displaying it in a statusbar error message. (DLR, found by Bill Marcum) + - If we can't save the backup file for some reason, at least + save the original file, if possible, since that's better than + saving nothing. (DLR, suggested by Jordi) - rcfile.c: parse_argument() - Rename variable ptr_bak to ptr_save, for consistency. (DLR) diff --git a/src/files.c b/src/files.c index 2a0fda55..00168d5f 100644 --- a/src/files.c +++ b/src/files.c @@ -1336,6 +1336,8 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type statusbar(_("Error reading %s: %s"), realname, strerror(errno)); beep(); + /* If we can't open the original file, we won't be able + * to save it, so get out. */ goto cleanup_and_exit; } } @@ -1375,8 +1377,10 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type _("Too many backup files?")); free(backuptemp); free(backupname); - fclose(f); - goto cleanup_and_exit; + /* If we can't write to the backup, go on, since only + * saving the original file is better than saving + * nothing. */ + goto skip_backup; } else { free(backupname); backupname = backuptemp; @@ -1398,8 +1402,9 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type free(backupname); if (backup_file != NULL) fclose(backup_file); - fclose(f); - goto cleanup_and_exit; + /* If we can't write to the backup, go on, since only saving + * the original file is better than saving nothing. */ + goto skip_backup; } #ifdef DEBUG @@ -1421,12 +1426,15 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type } else statusbar(_("Error writing %s: %s"), backupname, strerror(errno)); - free(backupname); - goto cleanup_and_exit; + /* If we can't read from or write to the backup, go on, + * since only saving the original file is better than saving + * nothing. */ } free(backupname); } + + skip_backup: #endif /* !NANO_TINY */ /* If NOFOLLOW_SYMLINKS is set and the file is a link, we aren't -- 2.39.5