- error (0, 0, "`%s' exists but is not a directory", dirpath);
- umask (oldmask);
+ struct ptr_list *new = (struct ptr_list *)
+ alloca (sizeof (struct ptr_list));
+ new->dirname_end = slash;
+ new->next = leading_dirs;
+ leading_dirs = new;
+ }
+
+ /* If we were able to save the initial working directory,
+ then we can use chdir to change into each directory before
+ creating an entry in that directory. This avoids making
+ stat and mkdir process O(n^2) file name components. */
+ if (do_chdir && chdir (basename_dir) < 0)
+ {
+ error (0, errno, "cannot chdir to directory, %s", dirpath);
+ CLEANUP;