Commit aee96b6c authored by fallenstardust's avatar fallenstardust

Fix memory allocation for data buffer

Removed null terminator allocation for memory data.
parent f37d471e
...@@ -85,10 +85,9 @@ bool DataManager::LoadDB(const wchar_t* wfile) { ...@@ -85,10 +85,9 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
spmembuffer_t* mem = (spmembuffer_t*)std::calloc(sizeof(spmembuffer_t), 1); spmembuffer_t* mem = (spmembuffer_t*)std::calloc(sizeof(spmembuffer_t), 1);
spmemvfs_env_init(); spmemvfs_env_init();
mem->total = mem->used = reader->getSize(); mem->total = mem->used = reader->getSize();
mem->data = (char*)std::malloc(mem->total + 1); mem->data = (char*)std::malloc(mem->total);
reader->read(mem->data, mem->total); reader->read(mem->data, mem->total);
reader->drop(); reader->drop();
(mem->data)[mem->total] = '\0';
bool ret{}; bool ret{};
if (spmemvfs_open_db(&db, file, mem) != SQLITE_OK) if (spmemvfs_open_db(&db, file, mem) != SQLITE_OK)
ret = Error(db.handle); ret = Error(db.handle);
......
...@@ -331,11 +331,11 @@ int32_t scriptlib::group_random_select(lua_State *L) { ...@@ -331,11 +331,11 @@ int32_t scriptlib::group_random_select(lua_State *L) {
check_param(L, PARAM_TYPE_GROUP, 1); check_param(L, PARAM_TYPE_GROUP, 1);
group* pgroup = *(group**) lua_touserdata(L, 1); group* pgroup = *(group**) lua_touserdata(L, 1);
int32_t playerid = (int32_t)lua_tointeger(L, 2); int32_t playerid = (int32_t)lua_tointeger(L, 2);
uint32_t count = (uint32_t)lua_tointeger(L, 3); int32_t count = (int32_t)lua_tointeger(L, 3);
duel* pduel = pgroup->pduel; duel* pduel = pgroup->pduel;
group* newgroup = pduel->new_group(); group* newgroup = pduel->new_group();
if(count > pgroup->container.size()) if (count > (int32_t)pgroup->container.size())
count = (uint32_t)pgroup->container.size(); count = (int32_t)pgroup->container.size();
if(count == 0) { if(count == 0) {
interpreter::group2value(L, newgroup); interpreter::group2value(L, newgroup);
return 1; return 1;
...@@ -343,12 +343,13 @@ int32_t scriptlib::group_random_select(lua_State *L) { ...@@ -343,12 +343,13 @@ int32_t scriptlib::group_random_select(lua_State *L) {
if(count == pgroup->container.size()) if(count == pgroup->container.size())
newgroup->container = pgroup->container; newgroup->container = pgroup->container;
else { else {
while(newgroup->container.size() < count) { card_vector cv(pgroup->container.begin(), pgroup->container.end());
int32_t i = pduel->get_next_integer(0, (int32_t)pgroup->container.size() - 1); int32_t back = (int32_t)cv.size() - 1;
auto cit = pgroup->container.begin(); for (int32_t i = 0; i < count; ++i) {
std::advance(cit, i); int32_t r = pduel->get_next_integer(i, back);
newgroup->container.insert(*cit); std::swap(cv[i], cv[r]);
} }
newgroup->container.insert(cv.begin(), cv.begin() + count);
} }
pduel->write_buffer8(MSG_RANDOM_SELECTED); pduel->write_buffer8(MSG_RANDOM_SELECTED);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment