VFS: Add more sane FileRead/Write* natives to read/write a single value

This commit is contained in:
Arkshine
2015-03-09 00:38:05 +01:00
parent a580c8c5e5
commit 71ab8d560e
2 changed files with 135 additions and 5 deletions

View File

@ -1132,11 +1132,49 @@ static cell SetFilePermissions(AMX *amx, cell *params)
}
return _chmod(realpath, mask) == 0;
#elif
#else
return chmod(realpath, params[2]) == 0;
#endif
}
template <typename T>
static cell File_ReadTyped(AMX *amx, cell *params)
{
FileObject* fp = reinterpret_cast<FileObject*>(params[1]);
if (!fp)
{
return 0;
}
cell* data = get_amxaddr(amx, params[2]);
T value;
if (fp->Read(&value, sizeof(value)) != sizeof(value))
{
return 0;
}
*data = value;
return 1;
}
template <typename T>
static cell File_WriteTyped(AMX *amx, cell *params)
{
FileObject* fp = reinterpret_cast<FileObject*>(params[1]);
if (!fp)
{
return 0;
}
T value = static_cast<T>(params[2]);
return !!(fp->Write(&value, sizeof(value)) == sizeof(value));
}
AMX_NATIVE_INFO file_Natives[] =
{
{"read_dir", read_dir},
@ -1181,10 +1219,17 @@ AMX_NATIVE_INFO file_Natives[] =
{"rmdir", amx_rmdir},
{"mkdir", amx_mkdir},
{"LoadFileForMe", LoadFileForMe},
{"GetFileTime", GetFileTime},
{"SetFilePermissions", SetFilePermissions},
{"LoadFileForMe", LoadFileForMe},
{"GetFileTime", GetFileTime},
{"SetFilePermissions", SetFilePermissions},
{"FileReadInt8", File_ReadTyped<int8_t>},
{"FileReadUint8", File_ReadTyped<uint8_t>},
{"FileReadInt16", File_ReadTyped<int16_t>},
{"FileReadUint16", File_ReadTyped<uint16_t>},
{"FileReadInt32", File_ReadTyped<int32_t>},
{"FileWriteInt8", File_WriteTyped<int8_t>},
{"FileWriteInt16", File_WriteTyped<int16_t>},
{"FileWriteInt32", File_WriteTyped<int32_t>},
{NULL, NULL}
};