(make_dir): When reporting a mkdir failure and the
authorJim Meyering <jim@meyering.net>
Thu, 6 May 1999 02:10:34 +0000 (02:10 +0000)
committerJim Meyering <jim@meyering.net>
Thu, 6 May 1999 02:10:34 +0000 (02:10 +0000)
target cannot be `stat'ed, use the errno from the failed mkdir call,
not the one from the stat call.  Before this change, running
`mkdir -p /no-dir/no-dir' as an unprivileged user would wrongly
elicit `No such file or directory' instead of `Permission denied'.

lib/makepath.c

index 4a758e37a7ae0ab69190eb61f377283c7c464ab0..20e9a1288ec6accd4b0518c3e8b3ad5e4a088849 100644 (file)
@@ -162,6 +162,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
   if (!created_dir)
     {
       struct stat stats;
+      int saved_errno = errno;
 
       /* The mkdir and stat calls below may appear to be reversed.
         They are not.  It is important to call mkdir first and then to
@@ -173,7 +174,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
 
       if (stat (dir, &stats))
        {
-         error (0, errno, _("cannot create directory `%s'"), dirpath);
+         error (0, saved_errno, _("cannot create directory `%s'"), dirpath);
          fail = 1;
        }
       else if (!S_ISDIR (stats.st_mode))