BUG: Fix problem with uninitialized variables
This commit is contained in:
parent
8a0e3c103b
commit
32bfe66b5d
|
@ -247,6 +247,7 @@ bool cmCacheManager::LoadCache(const char* path,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
e.m_Initialized = true;
|
||||||
m_Cache[entryKey] = e;
|
m_Cache[entryKey] = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,7 +364,7 @@ bool cmCacheManager::SaveCache(const char* path)
|
||||||
{
|
{
|
||||||
const CacheEntry& ce = (*i).second;
|
const CacheEntry& ce = (*i).second;
|
||||||
CacheEntryType t = ce.m_Type;
|
CacheEntryType t = ce.m_Type;
|
||||||
if(t == cmCacheManager::UNINITIALIZED)
|
if(t == cmCacheManager::UNINITIALIZED || !ce.m_Initialized)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
// This should be added in, but is not for now.
|
// This should be added in, but is not for now.
|
||||||
|
@ -423,6 +424,11 @@ bool cmCacheManager::SaveCache(const char* path)
|
||||||
for( cmCacheManager::CacheIterator i = this->NewIterator();
|
for( cmCacheManager::CacheIterator i = this->NewIterator();
|
||||||
!i.IsAtEnd(); i.Next())
|
!i.IsAtEnd(); i.Next())
|
||||||
{
|
{
|
||||||
|
if ( !i.Initialized() )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
CacheEntryType t = i.GetType();
|
CacheEntryType t = i.GetType();
|
||||||
bool advanced = i.PropertyExists("ADVANCED");
|
bool advanced = i.PropertyExists("ADVANCED");
|
||||||
if ( advanced )
|
if ( advanced )
|
||||||
|
@ -581,7 +587,8 @@ cmCacheManager::CacheIterator cmCacheManager::GetCacheIterator(const char *key)
|
||||||
const char* cmCacheManager::GetCacheValue(const char* key) const
|
const char* cmCacheManager::GetCacheValue(const char* key) const
|
||||||
{
|
{
|
||||||
CacheEntryMap::const_iterator i = m_Cache.find(key);
|
CacheEntryMap::const_iterator i = m_Cache.find(key);
|
||||||
if(i != m_Cache.end() && i->second.m_Type != cmCacheManager::UNINITIALIZED)
|
if(i != m_Cache.end() && i->second.m_Type != cmCacheManager::UNINITIALIZED &&
|
||||||
|
i->second.m_Initialized)
|
||||||
{
|
{
|
||||||
return i->second.m_Value.c_str();
|
return i->second.m_Value.c_str();
|
||||||
}
|
}
|
||||||
|
@ -616,10 +623,11 @@ void cmCacheManager::AddCacheEntry(const char* key,
|
||||||
if ( value )
|
if ( value )
|
||||||
{
|
{
|
||||||
e.m_Value = value;
|
e.m_Value = value;
|
||||||
|
e.m_Initialized = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
e.m_Value = "(none)";
|
e.m_Value = "";
|
||||||
}
|
}
|
||||||
e.m_Type = type;
|
e.m_Type = type;
|
||||||
// make sure we only use unix style paths
|
// make sure we only use unix style paths
|
||||||
|
@ -682,7 +690,15 @@ void cmCacheManager::CacheIterator::SetValue(const char* value)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CacheEntry* entry = &this->GetEntry();
|
CacheEntry* entry = &this->GetEntry();
|
||||||
entry->m_Value = value;
|
if ( value )
|
||||||
|
{
|
||||||
|
entry->m_Value = value;
|
||||||
|
entry->m_Initialized = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
entry->m_Value = "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* cmCacheManager::CacheIterator::GetProperty(const char* property) const
|
const char* cmCacheManager::CacheIterator::GetProperty(const char* property) const
|
||||||
|
|
|
@ -39,6 +39,9 @@ private:
|
||||||
std::string m_Value;
|
std::string m_Value;
|
||||||
CacheEntryType m_Type;
|
CacheEntryType m_Type;
|
||||||
std::map<cmStdString,cmStdString> m_Properties;
|
std::map<cmStdString,cmStdString> m_Properties;
|
||||||
|
bool m_Initialized;
|
||||||
|
CacheEntry() : m_Value(""), m_Type(UNINITIALIZED), m_Initialized(false)
|
||||||
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -59,6 +62,7 @@ public:
|
||||||
const char* GetValue() const { return this->GetEntry().m_Value.c_str(); }
|
const char* GetValue() const { return this->GetEntry().m_Value.c_str(); }
|
||||||
void SetValue(const char*);
|
void SetValue(const char*);
|
||||||
CacheEntryType GetType() const { return this->GetEntry().m_Type; }
|
CacheEntryType GetType() const { return this->GetEntry().m_Type; }
|
||||||
|
bool Initialized() { return this->GetEntry().m_Initialized; }
|
||||||
cmCacheManager &m_Container;
|
cmCacheManager &m_Container;
|
||||||
std::map<cmStdString, CacheEntry>::iterator m_Position;
|
std::map<cmStdString, CacheEntry>::iterator m_Position;
|
||||||
CacheIterator(cmCacheManager &cm) : m_Container(cm) {
|
CacheIterator(cmCacheManager &cm) : m_Container(cm) {
|
||||||
|
|
|
@ -842,7 +842,8 @@ void cmMakefile::AddCacheDefinition(const char* name, const char* value,
|
||||||
const char* val = value;
|
const char* val = value;
|
||||||
cmCacheManager::CacheIterator it =
|
cmCacheManager::CacheIterator it =
|
||||||
this->GetCacheManager()->GetCacheIterator(name);
|
this->GetCacheManager()->GetCacheIterator(name);
|
||||||
if(!it.IsAtEnd() && (it.GetType() == cmCacheManager::UNINITIALIZED))
|
if(!it.IsAtEnd() && (it.GetType() == cmCacheManager::UNINITIALIZED) &&
|
||||||
|
it.Initialized())
|
||||||
{
|
{
|
||||||
val = it.GetValue();
|
val = it.GetValue();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue