Fix nvault issues.

This includes an original one leading to a crash at mapchange if empty key or value are saved.
This commit is contained in:
Arkshine 2014-08-10 20:13:22 +02:00
parent 3dace577fe
commit 1ae40316a8

View File

@ -102,14 +102,14 @@ VaultError NVault::_ReadFromFile()
if (!br.ReadUInt8(keylen)) goto fail; if (!br.ReadUInt8(keylen)) goto fail;
if (!br.ReadUInt16(vallen)) goto fail; if (!br.ReadUInt16(vallen)) goto fail;
if (keylen > oldkeylen) if (!keylen || keylen > oldkeylen)
{ {
if (key) if (key)
delete [] key; delete [] key;
key = new char[keylen + 1]; key = new char[keylen + 1];
oldkeylen = keylen; oldkeylen = keylen;
} }
if (vallen > oldvallen) if (!vallen || vallen > oldvallen)
{ {
if (val) if (val)
delete [] val; delete [] val;
@ -209,13 +209,13 @@ success:
const char *NVault::GetValue(const char *key) const char *NVault::GetValue(const char *key)
{ {
ArrayInfo result; StringHashMap<ArrayInfo>::Result r = m_Hash.find(key);
if (!m_Hash.retrieve(key, &result)) if (!r.found())
{ {
result.value.setVoid(); return "";
} }
return result.value.chars(); return r->value.value.chars();
} }
bool NVault::Open() bool NVault::Open()
@ -350,10 +350,7 @@ void NVault::Touch(const char *key, time_t stamp)
return; return;
} }
ArrayInfo info; info.value = ""; info.stamp = time(NULL); SetValue(key, "", time(NULL));
i->key = key;
i->value = info;
} }
i->value.stamp = stamp; i->value.stamp = stamp;