forked from 0ad/0ad
# add error checking for VFS directory creation
refs #279 This was SVN commit r7056.
This commit is contained in:
parent
acb9658f81
commit
9ca097da58
@ -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));
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user