(main): When make_dir_parents changes the current working
authorJim Meyering <jim@meyering.net>
Mon, 13 Jun 2005 10:17:36 +0000 (10:17 +0000)
committerJim Meyering <jim@meyering.net>
Mon, 13 Jun 2005 10:17:36 +0000 (10:17 +0000)
directory, give a diagnostic about each subsequent failure to create
a dot-relative directory.

src/mkdir.c

index a2307bc..3ba3d7a 100644 (file)
@@ -87,6 +87,7 @@ main (int argc, char **argv)
   const char *verbose_fmt_string = NULL;
   int exit_status = EXIT_SUCCESS;
   int optc;
+  bool cwd_not_restored;
 
   initialize_main (&argc, &argv);
   program_name = argv[0];
@@ -145,15 +146,29 @@ main (int argc, char **argv)
        umask (umask_value);
     }
 
+  /* FIXME: when we assume C99, declare this here.  */
+  cwd_not_restored = false;
   for (; optind < argc; ++optind)
     {
       bool ok;
 
+      if (cwd_not_restored && IS_RELATIVE_FILE_NAME (argv[optind]))
+       {
+         error (0, 0, _("unable to create relative-named directory, %s,"
+                        " due to prior failure to restore working directory"),
+                quote (argv[optind]));
+         exit_status = EXIT_FAILURE;
+         continue;
+       }
+
       if (create_parents)
        {
+         bool different_cwd;
          char *dir = argv[optind];
          ok = make_dir_parents (dir, newmode, parent_mode,
-                                -1, -1, true, verbose_fmt_string);
+                                -1, -1, true, verbose_fmt_string,
+                                &different_cwd);
+         cwd_not_restored |= different_cwd;
        }
       else
        {