diff --git a/src/files.c b/src/files.c index 7ba166da..18bda431 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); + backup_dir = free_and_assign(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); - } + /* 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 935e07c4..150fc6d1 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