From 447f1b4b75cca42b5b14c8fb2ed4331cc7a107ae Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Sat, 9 Aug 2008 03:39:10 +0000 Subject: [PATCH] * files.c: Do not go on and attempt to write the main file if writing the backup file failed, related to Savannah bug 24000. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4297 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 4 ++++ src/files.c | 31 ++++++++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index e4b5f443..54ad1970 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-08-08 Chris Allegretta + * files.c: Do not go on and attempt to write the main file if writing the backup file failed, + related to Savannah bug 24000. + 2008-07-23 Chris Allegretta * text.c: Reset openfile-> to OTHER after an undo or redo so we don't mistakenly mistakenly think this is an update when it's really an add. Also diff --git a/src/files.c b/src/files.c index a5607dd2..11ac11dd 100644 --- a/src/files.c +++ b/src/files.c @@ -1474,14 +1474,15 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type free(backuptemp); backuptemp = get_next_filename(backupname, "~"); if (*backuptemp == '\0') { - statusbar(_("Error writing %s: %s"), backupname, + statusbar(_("Error writing backup file %s: %s"), backupname, _("Too many backup files?")); free(backuptemp); free(backupname); - /* If we can't write to the backup, go on, since only - * saving the original file is better than saving - * nothing. */ - goto skip_backup; + /* If we can't write to the backup, DONT go on, since + whatever caused the backup file to fail (e.g. disk + full may well cause the real file write to fail, which + means we could lose both the backup and the original! */ + goto cleanup_and_exit; } else { free(backupname); backupname = backuptemp; @@ -1498,14 +1499,16 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type if (backup_file == NULL || chmod(backupname, openfile->current_stat->st_mode) == -1) { - statusbar(_("Error writing %s: %s"), backupname, + statusbar(_("Error writing backup file %s: %s"), backupname, strerror(errno)); free(backupname); if (backup_file != NULL) fclose(backup_file); - /* If we can't write to the backup, go on, since only saving - * the original file is better than saving nothing. */ - goto skip_backup; + /* If we can't write to the backup, DONT go on, since + whatever caused the backup file to fail (e.g. disk + full may well cause the real file write to fail, which + means we could lose both the backup and the original! */ + goto cleanup_and_exit; } #ifdef DEBUG @@ -1525,11 +1528,13 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type strerror(errno)); beep(); } else - statusbar(_("Error writing %s: %s"), backupname, + statusbar(_("Error writing backup file %s: %s"), backupname, strerror(errno)); - /* If we can't read from or write to the backup, go on, - * since only saving the original file is better than saving - * nothing. */ + /* If we can't write to the backup, DONT go on, since + whatever caused the backup file to fail (e.g. disk + full may well cause the real file write to fail, which + means we could lose both the backup and the original! */ + goto cleanup_and_exit; } free(backupname);