(svn r26816) -Fix [FS#6109]: Properly zero-initialise data in _temp_engine.

This commit is contained in:
frosch 2014-09-13 14:46:03 +00:00
parent 61e129cc22
commit e53d97b4f8
1 changed files with 16 additions and 3 deletions

View File

@ -13,7 +13,7 @@
#include "saveload_internal.h" #include "saveload_internal.h"
#include "../engine_base.h" #include "../engine_base.h"
#include "../string_func.h" #include "../string_func.h"
#include <map> #include <vector>
#include "../safeguards.h" #include "../safeguards.h"
@ -48,11 +48,24 @@ static const SaveLoad _engine_desc[] = {
SLE_END() SLE_END()
}; };
static std::map<EngineID, Engine> _temp_engine; static std::vector<Engine> _temp_engine;
Engine *GetTempDataEngine(EngineID index) Engine *GetTempDataEngine(EngineID index)
{ {
return &_temp_engine[index]; if (index < _temp_engine.size()) {
return &_temp_engine[index];
} else if (index == _temp_engine.size()) {
uint8 zero[sizeof(Engine)];
memset(zero, 0, sizeof(zero));
Engine *engine = new (zero) Engine();
/* Adding 'engine' to the vector makes a shallow copy, so we do not want to destruct 'engine' */
_temp_engine.push_back(*engine);
return &_temp_engine[index];
} else {
NOT_REACHED();
}
} }
static void Save_ENGN() static void Save_ENGN()