diff --git a/ChangeLog b/ChangeLog index 8e22a09681071e58619c0fb2fa1960ce5f3422a4..32b1a1b61ce4f177ba682ce2c693cd3909775c59 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,8 @@ CVS code - save the original file, if possible, since that's better than saving nothing. (DLR, problem found by Bill Marcum, solution suggested by Jordi) + - Clarify the error message when writing a temporary file for + prepending fails. (DLR) - 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 d42b8ac7aa08ca4952d9ed556f3846af09fdd3b0..dd8c2a54cf992a662a4f8032763be403076b413a 100644 --- a/src/files.c +++ b/src/files.c @@ -1336,15 +1336,10 @@ 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 read from the original file, and we're - * prepending, get out, since we won't be able to save - * either the backup or the original file. If we're not - * prepending, go on, since only saving the original - * file is better than saving nothing. */ - if (append == PREPEND) - goto cleanup_and_exit; - else - goto skip_backup; + /* If we can't read from the original file, go on, since + * only saving the original file is better than saving + * nothing. */ + goto skip_backup; } } @@ -1468,10 +1463,21 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type int fd_source; FILE *f_source = NULL; + if (f == NULL) { + f = fopen(realname, "rb"); + + if (f == NULL) { + statusbar(_("Error reading %s: %s"), realname, + strerror(errno)); + beep(); + goto cleanup_and_exit; + } + } + tempname = safe_tempfile(&f); if (tempname == NULL) { - statusbar(_("Prepending to %s failed: %s"), realname, + statusbar(_("Could not create temp file: %s"), strerror(errno)); goto cleanup_and_exit; }