mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 22:35:37 +03:00
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. */
|
||||||
@ -227,14 +227,14 @@ native file_size(const file[], flag = FSOPT_BYTES_COUNT, bool:use_valve_fs = fal
|
|||||||
*
|
*
|
||||||
* @note Registered paths ID are (in priority order) :
|
* @note Registered paths ID are (in priority order) :
|
||||||
* GAME All paths related to current mod, including fallback
|
* GAME All paths related to current mod, including fallback
|
||||||
* Depending settings, it includes: <gamedir>_lv/_addon/_<language>/_hd
|
* Depending settings, it includes: <gamedir>_lv/_addon/_<language>/_hd
|
||||||
* and <gamedir> itself
|
* and <gamedir> itself
|
||||||
* GAMECONFIG The default writable directory (<gamedir>)
|
* GAMECONFIG The default writable directory (<gamedir>)
|
||||||
* GAMEDOWNLOAD The download directory (<gamedir>_download)
|
* GAMEDOWNLOAD The download directory (<gamedir>_download)
|
||||||
* GAME_FALLBACK All paths related to fallback game, same as GAME
|
* GAME_FALLBACK All paths related to fallback game, same as GAME
|
||||||
* DEFAULTGAME All paths related to the default game which is "valve", same as GAME
|
* DEFAULTGAME All paths related to the default game which is "valve", same as GAME
|
||||||
* BASE The base path where server is installed
|
* BASE The base path where server is installed
|
||||||
*
|
*
|
||||||
* Note that some paths are non-writable. It includes all <gamedir>_* (expect _download)
|
* Note that some paths are non-writable. It includes all <gamedir>_* (expect _download)
|
||||||
* and DEFAULTGAME. Any file inside a non-writable path will be ignored if you try to open
|
* and DEFAULTGAME. Any file inside a non-writable path will be ignored if you try to open
|
||||||
* it in writing mode.
|
* it in writing mode.
|
||||||
@ -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