VFS: Add SetFilePermissions native
This commit is contained in:
parent
0eeb5942a1
commit
a580c8c5e5
|
@ -1101,6 +1101,42 @@ static cell AMX_NATIVE_CALL GetFileTime(AMX *amx, cell *params)
|
||||||
return static_cast<cell>(time_val);
|
return static_cast<cell>(time_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define FPERM_U_READ 0x0100 /* User can read. */
|
||||||
|
#define FPERM_U_WRITE 0x0080 /* User can write. */
|
||||||
|
#define FPERM_U_EXEC 0x0040 /* User can exec. */
|
||||||
|
#define FPERM_G_READ 0x0020 /* Group can read. */
|
||||||
|
#define FPERM_G_WRITE 0x0010 /* Group can write. */
|
||||||
|
#define FPERM_G_EXEC 0x0008 /* Group can exec. */
|
||||||
|
#define FPERM_O_READ 0x0004 /* Anyone can read. */
|
||||||
|
#define FPERM_O_WRITE 0x0002 /* Anyone can write. */
|
||||||
|
#define FPERM_O_EXEC 0x0001 /* Anyone can exec. */
|
||||||
|
|
||||||
|
// native bool:SetFilePermissions(const path[], int mode);
|
||||||
|
static cell SetFilePermissions(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
int length;
|
||||||
|
const char* realpath = build_pathname(get_amxstring(amx, params[1], 0, length));
|
||||||
|
|
||||||
|
#if defined PLATFORM_WINDOWS
|
||||||
|
|
||||||
|
int mask = 0;
|
||||||
|
|
||||||
|
if (params[2] & (FPERM_U_WRITE | FPERM_G_WRITE | FPERM_O_WRITE))
|
||||||
|
{
|
||||||
|
mask |= _S_IWRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params[2] & (FPERM_U_READ | FPERM_G_READ | FPERM_O_READ | FPERM_U_EXEC | FPERM_G_EXEC | FPERM_O_EXEC))
|
||||||
|
{
|
||||||
|
mask |= _S_IREAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _chmod(realpath, mask) == 0;
|
||||||
|
#elif
|
||||||
|
return chmod(realpath, params[2]) == 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO file_Natives[] =
|
AMX_NATIVE_INFO file_Natives[] =
|
||||||
{
|
{
|
||||||
{"read_dir", read_dir},
|
{"read_dir", read_dir},
|
||||||
|
@ -1147,6 +1183,8 @@ AMX_NATIVE_INFO file_Natives[] =
|
||||||
|
|
||||||
{"LoadFileForMe", LoadFileForMe},
|
{"LoadFileForMe", LoadFileForMe},
|
||||||
{"GetFileTime", GetFileTime},
|
{"GetFileTime", GetFileTime},
|
||||||
|
{"SetFilePermissions", SetFilePermissions},
|
||||||
|
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ enum FileTimeType
|
||||||
#define BLOCK_BYTE 1
|
#define BLOCK_BYTE 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File permissions flags for use with mkdir().
|
* File permissions flags for use with mkdir() and SetFilePermissions().
|
||||||
*/
|
*/
|
||||||
#define FPERM_U_READ 0x0100 /* User can read. */
|
#define FPERM_U_READ 0x0100 /* User can read. */
|
||||||
#define FPERM_U_WRITE 0x0080 /* User can write. */
|
#define FPERM_U_WRITE 0x0080 /* User can write. */
|
||||||
|
@ -556,3 +556,13 @@ native LoadFileForMe(const file[], buffer[], maxlength, &length = 0);
|
||||||
* @return Returns a file timestamp as a unix timestamp
|
* @return Returns a file timestamp as a unix timestamp
|
||||||
*/
|
*/
|
||||||
native GetFileTime(const file[], FileTimeType:tmode);
|
native GetFileTime(const file[], FileTimeType:tmode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes a file or directories permissions.
|
||||||
|
*
|
||||||
|
* @param path Path to the file
|
||||||
|
* @param mode Permissions to set, see FPERM_* constants
|
||||||
|
*
|
||||||
|
* @return True on success, false otherwise
|
||||||
|
*/
|
||||||
|
native bool:SetFilePermissions(const path[], mode);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user