Fix missing backward compatibility for some Array natives.
This commit is contained in:
parent
486fa99602
commit
2c146f564e
|
@ -155,9 +155,12 @@ static cell AMX_NATIVE_CALL ArrayGetArray(AMX* amx, cell* params)
|
||||||
cell *blk = vec->at(idx);
|
cell *blk = vec->at(idx);
|
||||||
size_t indexes = vec->blocksize();
|
size_t indexes = vec->blocksize();
|
||||||
|
|
||||||
if (params[4] != -1 && (size_t)params[4] <= vec->blocksize())
|
if (*params / sizeof(cell) == 4)
|
||||||
{
|
{
|
||||||
indexes = params[4];
|
if (params[4] != -1 && (size_t)params[4] <= vec->blocksize())
|
||||||
|
{
|
||||||
|
indexes = params[4];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cell *addr = get_amxaddr(amx, params[3]);
|
cell *addr = get_amxaddr(amx, params[3]);
|
||||||
|
@ -186,6 +189,12 @@ static cell AMX_NATIVE_CALL ArrayGetCell(AMX* amx, cell* params)
|
||||||
}
|
}
|
||||||
|
|
||||||
cell *blk = vec->at(idx);
|
cell *blk = vec->at(idx);
|
||||||
|
|
||||||
|
if (*params / sizeof(cell) <= 2)
|
||||||
|
{
|
||||||
|
return *blk;
|
||||||
|
}
|
||||||
|
|
||||||
idx = (size_t)params[3];
|
idx = (size_t)params[3];
|
||||||
|
|
||||||
if (!params[4])
|
if (!params[4])
|
||||||
|
@ -255,9 +264,12 @@ static cell AMX_NATIVE_CALL ArraySetArray(AMX* amx, cell* params)
|
||||||
cell *blk = vec->at(idx);
|
cell *blk = vec->at(idx);
|
||||||
size_t indexes = vec->blocksize();
|
size_t indexes = vec->blocksize();
|
||||||
|
|
||||||
if (params[4] != -1 && (size_t)params[4] <= vec->blocksize())
|
if (*params / sizeof(cell) == 4)
|
||||||
{
|
{
|
||||||
indexes = params[4];
|
if (params[4] != -1 && (size_t)params[4] <= vec->blocksize())
|
||||||
|
{
|
||||||
|
indexes = params[4];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cell *addr = get_amxaddr(amx, params[3]);
|
cell *addr = get_amxaddr(amx, params[3]);
|
||||||
|
@ -288,6 +300,12 @@ static cell AMX_NATIVE_CALL ArraySetCell(AMX* amx, cell* params)
|
||||||
cell *blk = vec->at(idx);
|
cell *blk = vec->at(idx);
|
||||||
idx = (size_t)params[4];
|
idx = (size_t)params[4];
|
||||||
|
|
||||||
|
if (*params / sizeof(cell) <= 3)
|
||||||
|
{
|
||||||
|
*blk = params[3];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (params[5] == 0)
|
if (params[5] == 0)
|
||||||
{
|
{
|
||||||
if (idx >= vec->blocksize())
|
if (idx >= vec->blocksize())
|
||||||
|
@ -357,9 +375,12 @@ static cell AMX_NATIVE_CALL ArrayPushArray(AMX* amx, cell* params)
|
||||||
cell *addr = get_amxaddr(amx, params[2]);
|
cell *addr = get_amxaddr(amx, params[2]);
|
||||||
size_t indexes = vec->blocksize();
|
size_t indexes = vec->blocksize();
|
||||||
|
|
||||||
if (params[3] != -1 && (size_t)params[3] <= vec->blocksize())
|
if (*params / sizeof(cell) == 3)
|
||||||
{
|
{
|
||||||
indexes = params[3];
|
if (params[3] != -1 && (size_t)params[3] <= vec->blocksize())
|
||||||
|
{
|
||||||
|
indexes = params[3];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(blk, addr, sizeof(cell) * indexes);
|
memcpy(blk, addr, sizeof(cell) * indexes);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user