1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-22 22:34:33 +01:00

Refactor memory handling in ServerList

This commit is contained in:
Ted John
2018-01-26 13:13:51 +00:00
parent 04ea015302
commit 5d51676523
3 changed files with 82 additions and 121 deletions

View File

@@ -14,14 +14,15 @@
*****************************************************************************/
#pragma endregion
#include <vector>
#include "../core/FileStream.hpp"
#include "../core/Memory.hpp"
#include "../core/Path.hpp"
#include "../core/String.hpp"
#include "../platform/platform.h"
#include "ServerList.h"
#include "../platform/platform.h"
bool server_list_read(uint32 * outNumEntries, server_entry * * outEntries)
std::vector<server_entry> server_list_read()
{
log_verbose("server_list_read(...)");
@@ -29,13 +30,12 @@ bool server_list_read(uint32 * outNumEntries, server_entry * * outEntries)
platform_get_user_directory(path, nullptr, sizeof(path));
Path::Append(path, sizeof(path), "servers.cfg");
uint32 numEntries = 0;
server_entry * entries = nullptr;
std::vector<server_entry> entries;
try
{
auto fs = FileStream(path, FILE_MODE_OPEN);
numEntries = fs.ReadValue<uint32>();
entries = Memory::AllocateArray<server_entry>(numEntries);
auto numEntries = fs.ReadValue<uint32>();
entries.resize(numEntries);
// Load each server entry
for (uint32 i = 0; i < numEntries; i++)
@@ -53,19 +53,14 @@ bool server_list_read(uint32 * outNumEntries, server_entry * * outEntries)
}
catch (const std::exception &)
{
Memory::FreeArray(entries, numEntries);
numEntries = 0;
entries = nullptr;
entries = std::vector<server_entry>();
}
*outNumEntries = numEntries;
*outEntries = entries;
return entries != nullptr;
return entries;
}
bool server_list_write(uint32 numEntries, server_entry * entries)
bool server_list_write(const std::vector<server_entry> &entries)
{
log_verbose("server_list_write(%d, 0x%p)", numEntries, entries);
log_verbose("server_list_write(%d, 0x%p)", entries.size(), entries.data());
utf8 path[MAX_PATH];
platform_get_user_directory(path, nullptr, sizeof(path));
@@ -74,15 +69,14 @@ bool server_list_write(uint32 numEntries, server_entry * entries)
try
{
auto fs = FileStream(path, FILE_MODE_WRITE);
fs.WriteValue<uint32>(numEntries);
fs.WriteValue<uint32>((uint32)entries.size());
// Write each server entry
for (uint32 i = 0; i < numEntries; i++)
for (const auto &entry : entries)
{
server_entry * serverInfo = &entries[i];
fs.WriteString(serverInfo->address);
fs.WriteString(serverInfo->name);
fs.WriteString(serverInfo->description);
fs.WriteString(entry.address);
fs.WriteString(entry.name);
fs.WriteString(entry.description);
}
return true;
}
@@ -91,4 +85,3 @@ bool server_list_write(uint32 numEntries, server_entry * entries)
return false;
}
}