mirror of
https://github.com/aimrebirth/tools.git
synced 2026-04-14 17:33:25 +00:00
Process db better. Respect value size.
This commit is contained in:
parent
9a9082dfb7
commit
068f0e185e
1 changed files with 11 additions and 14 deletions
|
|
@ -91,35 +91,32 @@ void value::load_fields(const tab &tab, buffer &b)
|
||||||
while (!data.eof())
|
while (!data.eof())
|
||||||
{
|
{
|
||||||
field_value fv;
|
field_value fv;
|
||||||
try
|
|
||||||
{
|
|
||||||
READ(data, fv.field_id);
|
READ(data, fv.field_id);
|
||||||
}
|
|
||||||
catch (std::exception &)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
READ(data, fv.size);
|
READ(data, fv.size);
|
||||||
auto i = tab.fields.find(fv.field_id);
|
auto i = tab.fields.find(fv.field_id);
|
||||||
if (i == tab.fields.end())
|
if (i == tab.fields.end())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
buffer data2(data, fv.size);
|
||||||
switch (i->second.type)
|
switch (i->second.type)
|
||||||
{
|
{
|
||||||
case FieldType::String:
|
case FieldType::String:
|
||||||
fv.s.resize(fv.size);
|
fv.s.resize(fv.size);
|
||||||
READ_N(data, fv.s[0], fv.s.size());
|
READ_N(data2, fv.s[0], fv.s.size());
|
||||||
while (!fv.s.empty() && fv.s.back() == '\0')
|
while (!fv.s.empty() && fv.s.back() == '\0')
|
||||||
fv.s.resize(fv.s.size() - 1);
|
fv.s.resize(fv.s.size() - 1);
|
||||||
break;
|
break;
|
||||||
case FieldType::Integer:
|
case FieldType::Integer:
|
||||||
READ(data, fv.i);
|
if (sizeof(fv.i) <= fv.size)
|
||||||
if (fv.size > sizeof(fv.i))
|
READ(data2, fv.i);
|
||||||
data.skip(fv.size - sizeof(fv.i));
|
else
|
||||||
|
std::cout << "small int field: " << fv.size << "\n";
|
||||||
break;
|
break;
|
||||||
case FieldType::Float:
|
case FieldType::Float:
|
||||||
READ(data, fv.f);
|
if (sizeof(fv.f) <= fv.size)
|
||||||
if (fv.size > sizeof(fv.i))
|
READ(data2, fv.f);
|
||||||
data.skip(fv.size - sizeof(fv.i));
|
else
|
||||||
|
std::cout << "small float field: " << fv.size << "\n";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue