diff --git a/src/files.c b/src/files.c
index db942893643c8751db7c10a9230fbdb2b0848560..b37553b9488bcb51b0d69b3c598b35bfdf6bbaf8 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1604,7 +1604,7 @@ bool write_file(const char *name, FILE *f_open, bool tmp,
 		(method != OVERWRITE || openfile->mark_set ||
 		openfile->current_stat->st_mtime == st.st_mtime)) {
 	int backup_fd;
-	FILE *backup_file;
+	FILE *backup_file = NULL;
 	char *backupname;
 	static struct timespec filetime[2];
 	int backup_cflags;
@@ -1695,11 +1695,11 @@ bool write_file(const char *name, FILE *f_open, bool tmp,
 
 	backup_fd = open(backupname, backup_cflags,
 		S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
-	/* Now we've got a safe file stream.  If the previous open()
-	 * call failed, this will return NULL. */
-	backup_file = fdopen(backup_fd, "wb");
 
-	if (backup_fd < 0 || backup_file == NULL) {
+	if (backup_fd >= 0)
+	    backup_file = fdopen(backup_fd, "wb");
+
+	if (backup_file == NULL) {
 	    statusline(HUSH, _("Error writing backup file %s: %s"),
 			backupname, strerror(errno));
 	    free(backupname);