mkdir: always check-for-existence

When using NtCreateFile when creating a directory that already exists,
it will correctly return 'STATUS_OBJECT_NAME_COLLISION'.

However using this function to create a directory (and all its parents)
a normal use would be to start with mkdir(‘/cygdrive/c’) which translates
to ‘C:\’ for which it'll instead return ‘STATUS_ACCESS_DENIED’.
This commit is contained in:
Ben Wijen 2019-06-03 20:15:50 +02:00 committed by Corinna Vinschen
parent 5c2a3661c1
commit b0c033bf3f
1 changed files with 3 additions and 1 deletions

View File

@ -331,8 +331,10 @@ mkdir (const char *dir, mode_t mode)
debug_printf ("got %d error from build_fh_name", fh->error ()); debug_printf ("got %d error from build_fh_name", fh->error ());
set_errno (fh->error ()); set_errno (fh->error ());
} }
else if (fh->exists ())
set_errno (EEXIST);
else if (has_dot_last_component (dir, true)) else if (has_dot_last_component (dir, true))
set_errno (fh->exists () ? EEXIST : ENOENT); set_errno (ENOENT);
else if (!fh->mkdir (mode)) else if (!fh->mkdir (mode))
res = 0; res = 0;
delete fh; delete fh;