Fixed bug am42307 (nvault_open did not return -1 on failure)

This commit is contained in:
David Anderson 2006-08-18 22:46:07 +00:00
parent a8b4ebbe70
commit 042b9f7f4b
5 changed files with 56 additions and 5 deletions

View File

@ -20,6 +20,9 @@ public:
class IVaultMngr
{
public:
/**
* Note: Will return NULL if the vault failed to create.
*/
virtual IVault *OpenVault(const char *name) =0;
};

View File

@ -18,7 +18,9 @@ int Journal::Replay(VaultMap *pMap)
{
m_fp = fopen(m_File.c_str(), "rb");
if (!m_fp)
{
return -1;
}
BinaryReader br(m_fp);

View File

@ -32,6 +32,18 @@ NVault::NVault(const char *file)
m_File.assign(file);
m_Journal = NULL;
m_Open = false;
FILE *fp = fopen(m_File.c_str(), "rb");
if (!fp)
{
fp = fopen(m_File.c_str(), "wb");
if (!fp)
{
throw Vault_NoFile;
}
}
fclose(fp);
}
NVault::~NVault()
@ -44,7 +56,9 @@ VaultError NVault::_ReadFromFile()
FILE *fp = fopen(m_File.c_str(), "rb");
if (!fp)
{
return Vault_NoFile;
}
//this is a little more optimized than the other version in the journal <_<
//I could optimize this more by embedding the position in the hash table but...
// the hash function can be changed. this could be fixed by storing a string and its
@ -123,7 +137,9 @@ bool NVault::_SaveToFile()
FILE *fp = fopen(m_File.c_str(), "wb");
if (!fp)
{
return false;
}
BinaryWriter bw(fp);
@ -195,7 +211,11 @@ bool NVault::Open()
m_Journal->Replay(&m_Hash);
m_Journal->Erase();
m_Journal->Begin();
if (!m_Journal->Begin())
{
delete m_Journal;
m_Journal = NULL;
}
m_Open = true;
@ -285,8 +305,14 @@ bool NVault::GetValue(const char *key, time_t &stamp, char buffer[], size_t len)
IVault *VaultMngr::OpenVault(const char *file)
{
NVault *pVault = new NVault(file);
NVault *pVault;
try
{
pVault = new NVault(file);
} catch (...) {
pVault = NULL;
}
return static_cast<IVault *>(pVault);
}

View File

@ -36,8 +36,8 @@ static cell nvault_open(AMX *amx, cell *params)
if (strcmp(g_Vaults.at(i)->GetFilename(), file) == 0)
return i;
}
NVault *v = new NVault(file);
if (!v->Open())
NVault *v = (NVault *)g_VaultMngr.OpenVault(file);
if (v == NULL || !v->Open())
{
delete v;
return -1;

View File

@ -0,0 +1,20 @@
#include <amxmodx>
#include <nvault>
public plugin_init()
{
register_plugin("nVault Test", "1.0", "BAILOPAN")
register_srvcmd("test_nvault", "Command_TestNvault")
}
public Command_TestNvault()
{
new v = nvault_open("://:/1/R!?#@41345$%:$")
server_print("Vault value: %d (expected: %d)", v, -1)
if (v != -1)
{
nvault_close(v)
}
}