diff --git a/src/files.c b/src/files.c index 4ad0dc6c..573c449a 100644 --- a/src/files.c +++ b/src/files.c @@ -1411,12 +1411,9 @@ char *safe_tempfile(FILE **f) } #ifndef DISABLE_OPERATINGDIR -/* Initialize full_operating_dir based on operating_dir. */ +/* Change to the specified operating directory, when it's valid. */ void init_operating_dir(void) { - if (operating_dir == NULL) - return; - full_operating_dir = get_full_path(operating_dir); /* If the operating directory is inaccessible, fail. */ @@ -1493,17 +1490,13 @@ int prompt_failed_backupwrite(const char *filename) return response; } +/* Transform the specified backup directory to an absolute path. */ void init_backup_dir(void) { - char *full_backup_dir; + char *full_backup_dir = get_full_path(backup_dir); - if (backup_dir == NULL) - return; - - full_backup_dir = get_full_path(backup_dir); - - /* If get_full_path() failed or the backup directory is - * inaccessible, unset 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); diff --git a/src/nano.c b/src/nano.c index 2266c543..44b83c9d 100644 --- a/src/nano.c +++ b/src/nano.c @@ -2374,19 +2374,18 @@ int main(int argc, char **argv) #endif /* !DISABLE_HISTORIES */ #ifndef NANO_TINY - /* Set up the backup directory (unless we're using restricted mode, - * in which case backups are disabled, since they would allow - * reading from or writing to files not specified on the command - * line). This entails making sure it exists and is a directory, so - * that backup files will be saved there. */ - if (!ISSET(RESTRICTED)) + /* 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)) init_backup_dir(); #endif #ifndef DISABLE_OPERATINGDIR /* Set up the operating directory. This entails chdir()ing there, * so that file reads and writes will be based there. */ - init_operating_dir(); + if (operating_dir != NULL) + init_operating_dir(); #endif #ifndef DISABLE_JUSTIFY