1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-16 10:08:36 +03:00

0028391: Foundation Classes - OSD_Directory returns incorrect protection flags for shared directory on Windows

Redirect Folder reading flags to File reading flags when Folder flags are not found.
This commit is contained in:
kgv 2017-01-25 17:51:03 +03:00 committed by apn
parent 06bc0a59fa
commit 2b3e2b780d

View File

@ -2601,113 +2601,48 @@ static OSD_SingleProtection __fastcall _get_protection ( DWORD mask ) {
} // end _get_protection } // end _get_protection
static OSD_SingleProtection __fastcall _get_protection_dir ( DWORD mask ) { static OSD_SingleProtection __fastcall _get_protection_dir (DWORD theMask)
{
OSD_SingleProtection retVal; switch (theMask)
{
switch ( mask ) {
case GENERIC_READ: case GENERIC_READ:
return OSD_R;
retVal = OSD_R;
break;
case GENERIC_WRITE: case GENERIC_WRITE:
return OSD_W;
retVal = OSD_W;
break;
case GENERIC_READ | GENERIC_WRITE: case GENERIC_READ | GENERIC_WRITE:
return OSD_RW;
retVal = OSD_RW;
break;
case GENERIC_EXECUTE: case GENERIC_EXECUTE:
return OSD_X;
retVal = OSD_X;
break;
case GENERIC_READ | GENERIC_EXECUTE: case GENERIC_READ | GENERIC_EXECUTE:
return OSD_RX;
retVal = OSD_RX;
break;
case GENERIC_WRITE | GENERIC_EXECUTE: case GENERIC_WRITE | GENERIC_EXECUTE:
return OSD_WX;
retVal = OSD_WX;
break;
case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE: case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE:
return OSD_RWX;
retVal = OSD_RWX;
break;
case DELETE: case DELETE:
return OSD_D;
retVal = OSD_D;
break;
case GENERIC_READ | DELETE: case GENERIC_READ | DELETE:
return OSD_RD;
retVal = OSD_RD;
break;
case GENERIC_WRITE | DELETE: case GENERIC_WRITE | DELETE:
return OSD_WD;
retVal = OSD_WD;
break;
case GENERIC_READ | GENERIC_WRITE | DELETE: case GENERIC_READ | GENERIC_WRITE | DELETE:
return OSD_RWD;
retVal = OSD_RWD;
break;
case GENERIC_EXECUTE | DELETE: case GENERIC_EXECUTE | DELETE:
return OSD_XD;
retVal = OSD_XD;
break;
case GENERIC_READ | GENERIC_EXECUTE | DELETE: case GENERIC_READ | GENERIC_EXECUTE | DELETE:
return OSD_RXD;
retVal = OSD_RXD;
break;
case GENERIC_WRITE | GENERIC_EXECUTE | DELETE: case GENERIC_WRITE | GENERIC_EXECUTE | DELETE:
return OSD_WXD;
retVal = OSD_WXD;
break;
case FILE_ALL_ACCESS: case FILE_ALL_ACCESS:
case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | DELETE: case GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | DELETE:
return OSD_RWXD;
retVal = OSD_RWXD;
break;
case 0: case 0:
return OSD_None;
default: default:
// remote directories (on Samba server) have flags like for files
retVal = OSD_None; return _get_protection (theMask);
}
} // end switch }
return retVal;
} // end _get_protection_dir
#endif #endif
Standard_Boolean OSD_File::IsReadable() Standard_Boolean OSD_File::IsReadable()