diff --git a/src/files.c b/src/files.c
index 7ba166dada15dd6fb859d375d37f29f5cf07510c..18bda431646b03e219d7b7dca03c9591c90024e5 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1487,23 +1487,18 @@ int prompt_failed_backupwrite(const char *filename)
     return response;
 }
 
-/* Transform the specified backup directory to an absolute path. */
+/* Transform the specified backup directory to an absolute path,
+ * and verify that it is usable. */
 void init_backup_dir(void)
 {
-    char *full_backup_dir = get_full_path(backup_dir);
-
-    /* When we can't get an absolute path, or it's not a directory,
-     * cancel the making of backups. */
-    if (full_backup_dir == NULL ||
-		full_backup_dir[strlen(full_backup_dir) - 1] != '/') {
-	free(full_backup_dir);
-	free(backup_dir);
-	backup_dir = NULL;
-    } else {
-	free(backup_dir);
-	backup_dir = full_backup_dir;
-	snuggly_fit(&backup_dir);
-    }
+    backup_dir = free_and_assign(backup_dir, get_full_path(backup_dir));
+
+    /* If we can't get an absolute path (which means it doesn't exist or
+       isn't accessible), or it's not a directory, fail. */
+    if (backup_dir == NULL || backup_dir[strlen(backup_dir) - 1] != '/')
+	die(_("Invalid backup directory\n"));
+
+    snuggly_fit(&backup_dir);
 }
 #endif /* !NANO_TINY */
 
diff --git a/src/nano.c b/src/nano.c
index 935e07c43f50148b7735a5bdf79a0e4e4fe71769..150fc6d17afb64e7d47a39ee5343b4b252df8f18 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -2375,10 +2375,10 @@ int main(int argc, char **argv)
 #endif /* !DISABLE_HISTORIES */
 
 #ifndef NANO_TINY
-    /* If a backup directory was specified and we're not in restricted mode,
-     * make sure the path exists and is a directory, so that backup files can
-     * be saved there. */
-    if (backup_dir != NULL && !ISSET(RESTRICTED))
+    /* If backups are enabled and a backup directory was specified and
+     * we're not in restricted mode, make sure the path exists and is
+     * a directory, so that backup files can be saved there. */
+    if (ISSET(BACKUP_FILE) && backup_dir != NULL && !ISSET(RESTRICTED))
 	init_backup_dir();
 #endif