Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 26 additions & 14 deletions core/logic/smn_sorting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,13 +283,17 @@ int sort_strings_asc(const void *blk1, const void *blk2)
cell_t str_addr1 = *(cell_t *)blk1;
cell_t str_addr2 = *(cell_t *)blk2;

char *str1;
char *str2;
if (sSortContext->LocalToString(str_addr1, &str1) != SP_ERROR_NONE ||
sSortContext->LocalToString(str_addr2, &str2) != SP_ERROR_NONE)
ARRAY_PTR h1, h2;
if (sSortContext->LocalToArrayPtr(str_addr1, &h1) != SP_ERROR_NONE ||
sSortContext->LocalToArrayPtr(str_addr2, &h2) != SP_ERROR_NONE)
{
return 0;
}
char *str1 = (char *)sSortContext->GetArrayData(h1);
char *str2 = (char *)sSortContext->GetArrayData(h2);

if (!str1 || !str2)
return 0;

return strcmp(str1, str2);
}
Expand All @@ -299,13 +303,17 @@ int sort_strings_desc(const void *blk1, const void *blk2)
cell_t str_addr1 = *(cell_t *)blk1;
cell_t str_addr2 = *(cell_t *)blk2;

char *str1;
char *str2;
if (sSortContext->LocalToString(str_addr1, &str1) != SP_ERROR_NONE ||
sSortContext->LocalToString(str_addr2, &str2) != SP_ERROR_NONE)
ARRAY_PTR h1, h2;
if (sSortContext->LocalToArrayPtr(str_addr1, &h1) != SP_ERROR_NONE ||
sSortContext->LocalToArrayPtr(str_addr2, &h2) != SP_ERROR_NONE)
{
return 0;
}
char *str1 = (char *)sSortContext->GetArrayData(h1);
char *str2 = (char *)sSortContext->GetArrayData(h2);

if (!str1 || !str2)
return 0;

return strcmp(str2, str1);
}
Expand All @@ -316,12 +324,14 @@ static cell_t sm_SortStrings(IPluginContext *pContext, const cell_t *params)
if (!rt->UsesDirectArrays())
return sm_SortStrings_Legacy(pContext, params);

cell_t *array;
ARRAY_PTR handle;
if (pContext->LocalToArrayPtr(params[1], &handle) != SP_ERROR_NONE)
return 0;

cell_t *array = (cell_t *)pContext->GetArrayData(handle);
cell_t array_size = params[2];
cell_t type = params[3];

pContext->LocalToPhysAddr(params[1], &array);

ke::SaveAndSet<IPluginContext*> set_context(&sSortContext, pContext);

if (type == Sort_Ascending)
Expand Down Expand Up @@ -507,12 +517,14 @@ static cell_t sm_SortCustom2D(IPluginContext *pContext, const cell_t *params)
if (!rt->UsesDirectArrays())
return sm_SortCustom2D_Legacy(pContext, params);

cell_t *array;
ARRAY_PTR handle;
if (pContext->LocalToArrayPtr(params[1], &handle) != SP_ERROR_NONE)
return 0;

cell_t *array = (cell_t *)pContext->GetArrayData(handle);
cell_t array_size = params[2];
IPluginFunction *pFunction;

pContext->LocalToPhysAddr(params[1], &array);

if ((pFunction=pContext->GetFunctionById(params[3])) == NULL)
{
return pContext->ThrowNativeError("Function %x is not a valid function", params[3]);
Expand Down
4 changes: 2 additions & 2 deletions plugins/testsuite/mock/test_format.sp
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ void TestBinary()
AssertFmtEq("'%b'", 128, "'10000000'");
AssertFmtEq("'%b'", 1234567, "'100101101011010000111'");
AssertFmtEq("'%b'", 2147483647, "'1111111111111111111111111111111'");
AssertFmtEq("'%b'", 4294967295, "'11111111111111111111111111111111'");
AssertFmtEq("'%b'", 0xFFFFFFFF, "'11111111111111111111111111111111'");
AssertFmtEq("'%b'", -1, "'11111111111111111111111111111111'");

// Precision
Expand Down Expand Up @@ -515,7 +515,7 @@ void TestUInt()
AssertFmtEq("'%u'", 128, "'128'");
AssertFmtEq("'%u'", 1234567, "'1234567'");
AssertFmtEq("'%u'", 2147483647, "'2147483647'");
AssertFmtEq("'%u'", 4294967295, "'4294967295'");
AssertFmtEq("'%u'", 0xFFFFFFFF, "'4294967295'");
AssertFmtEq("'%u'", -1, "'4294967295'");

// Precision
Expand Down