diff --git a/src/files.c b/src/files.c
index 4ad0dc6c98baa521746aab0fa9ad4e9201f62e8b..573c449a73b3b325b900bcfb06a50cf1ee99b346 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;
-
-    if (backup_dir == NULL)
-	return;
-
-    full_backup_dir = get_full_path(backup_dir);
+    char *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 2266c54312cc81c479739126d2f928c8b6b1e494..44b83c9d487139f927bf9ae1bcf9f887d7eb223c 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