# add error checking for VFS directory creation

refs #279

This was SVN commit r7056.
This commit is contained in:
janwas 2009-07-31 21:16:09 +00:00
parent acb9658f81
commit 9ca097da58
2 changed files with 28 additions and 1 deletions

View File

@ -68,11 +68,17 @@ LibError vfs_Lookup(const VfsPath& pathname, VfsDirectory* startDirectory, VfsDi
if(directory->AssociatedDirectory()) // (is NULL when mounting into root)
currentPath = directory->AssociatedDirectory()->GetPath()/subdirectoryName;
if(mkdir(currentPath.external_directory_string().c_str(), S_IRWXO|S_IRWXU|S_IRWXG) == 0)
const int ret = mkdir(currentPath.external_directory_string().c_str(), S_IRWXO|S_IRWXU|S_IRWXG);
if(ret == 0)
{
PRealDirectory realDirectory(new RealDirectory(currentPath, 0, 0));
RETURN_ERR(vfs_Attach(subdirectory, realDirectory));
}
else if(errno != EEXIST) // notify of unexpected failures
{
debug_printf("mkdir failed with errno=%d\n", errno);
debug_assert(0);
}
}
RETURN_ERR(vfs_Populate(subdirectory));

View File

@ -163,10 +163,31 @@ int access(const char* path, int mode)
#ifndef HAVE_MKDIR
static int ErrnoFromCreateDirectory()
{
switch(GetLastError())
{
case ERROR_ALREADY_EXISTS:
return EEXIST;
case ERROR_PATH_NOT_FOUND:
return ENOENT;
case ERROR_ACCESS_DENIED:
return EACCES;
case ERROR_WRITE_PROTECT:
return EROFS;
case ERROR_DIRECTORY:
return ENOTDIR;
default:
return 0;
}
}
int mkdir(const char* path, mode_t UNUSED(mode))
{
if(!CreateDirectory(path, (LPSECURITY_ATTRIBUTES)NULL))
{
errno = ErrnoFromCreateDirectory();
return -1;
}