* 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
master
Chris Allegretta 2008-08-09 03:39:10 +00:00
parent 6f681c1be2
commit 447f1b4b75
2 changed files with 22 additions and 13 deletions

View File

@ -1,3 +1,7 @@
2008-08-08 Chris Allegretta <chrisa@asty.org>
* 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 <chrisa@asty.org> 2008-07-23 Chris Allegretta <chrisa@asty.org>
* text.c: Reset openfile-> to OTHER after an undo or redo so we don't mistakenly * 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 mistakenly think this is an update when it's really an add. Also

View File

@ -1474,14 +1474,15 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type
free(backuptemp); free(backuptemp);
backuptemp = get_next_filename(backupname, "~"); backuptemp = get_next_filename(backupname, "~");
if (*backuptemp == '\0') { if (*backuptemp == '\0') {
statusbar(_("Error writing %s: %s"), backupname, statusbar(_("Error writing backup file %s: %s"), backupname,
_("Too many backup files?")); _("Too many backup files?"));
free(backuptemp); free(backuptemp);
free(backupname); free(backupname);
/* If we can't write to the backup, go on, since only /* If we can't write to the backup, DONT go on, since
* saving the original file is better than saving whatever caused the backup file to fail (e.g. disk
* nothing. */ full may well cause the real file write to fail, which
goto skip_backup; means we could lose both the backup and the original! */
goto cleanup_and_exit;
} else { } else {
free(backupname); free(backupname);
backupname = backuptemp; 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, if (backup_file == NULL || chmod(backupname,
openfile->current_stat->st_mode) == -1) { openfile->current_stat->st_mode) == -1) {
statusbar(_("Error writing %s: %s"), backupname, statusbar(_("Error writing backup file %s: %s"), backupname,
strerror(errno)); strerror(errno));
free(backupname); free(backupname);
if (backup_file != NULL) if (backup_file != NULL)
fclose(backup_file); fclose(backup_file);
/* If we can't write to the backup, go on, since only saving /* If we can't write to the backup, DONT go on, since
* the original file is better than saving nothing. */ whatever caused the backup file to fail (e.g. disk
goto skip_backup; 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 #ifdef DEBUG
@ -1525,11 +1528,13 @@ bool write_file(const char *name, FILE *f_open, bool tmp, append_type
strerror(errno)); strerror(errno));
beep(); beep();
} else } else
statusbar(_("Error writing %s: %s"), backupname, statusbar(_("Error writing backup file %s: %s"), backupname,
strerror(errno)); strerror(errno));
/* If we can't read from or write to the backup, go on, /* If we can't write to the backup, DONT go on, since
* since only saving the original file is better than saving whatever caused the backup file to fail (e.g. disk
* nothing. */ 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); free(backupname);