BUG: Fix problem with uninitialized variables

This commit is contained in:
Andy Cedilnik 2003-08-02 09:33:23 -04:00
parent 8a0e3c103b
commit 32bfe66b5d
3 changed files with 26 additions and 5 deletions

View File

@ -247,6 +247,7 @@ bool cmCacheManager::LoadCache(const char* path,
}
else
{
e.m_Initialized = true;
m_Cache[entryKey] = e;
}
}
@ -363,7 +364,7 @@ bool cmCacheManager::SaveCache(const char* path)
{
const CacheEntry& ce = (*i).second;
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.
@ -423,6 +424,11 @@ bool cmCacheManager::SaveCache(const char* path)
for( cmCacheManager::CacheIterator i = this->NewIterator();
!i.IsAtEnd(); i.Next())
{
if ( !i.Initialized() )
{
continue;
}
CacheEntryType t = i.GetType();
bool advanced = i.PropertyExists("ADVANCED");
if ( advanced )
@ -581,7 +587,8 @@ cmCacheManager::CacheIterator cmCacheManager::GetCacheIterator(const char *key)
const char* cmCacheManager::GetCacheValue(const char* key) const
{
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();
}
@ -616,10 +623,11 @@ void cmCacheManager::AddCacheEntry(const char* key,
if ( value )
{
e.m_Value = value;
e.m_Initialized = true;
}
else
{
e.m_Value = "(none)";
e.m_Value = "";
}
e.m_Type = type;
// make sure we only use unix style paths
@ -682,7 +690,15 @@ void cmCacheManager::CacheIterator::SetValue(const char* value)
return;
}
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

View File

@ -39,6 +39,9 @@ private:
std::string m_Value;
CacheEntryType m_Type;
std::map<cmStdString,cmStdString> m_Properties;
bool m_Initialized;
CacheEntry() : m_Value(""), m_Type(UNINITIALIZED), m_Initialized(false)
{}
};
public:
@ -59,6 +62,7 @@ public:
const char* GetValue() const { return this->GetEntry().m_Value.c_str(); }
void SetValue(const char*);
CacheEntryType GetType() const { return this->GetEntry().m_Type; }
bool Initialized() { return this->GetEntry().m_Initialized; }
cmCacheManager &m_Container;
std::map<cmStdString, CacheEntry>::iterator m_Position;
CacheIterator(cmCacheManager &cm) : m_Container(cm) {

View File

@ -842,7 +842,8 @@ void cmMakefile::AddCacheDefinition(const char* name, const char* value,
const char* val = value;
cmCacheManager::CacheIterator it =
this->GetCacheManager()->GetCacheIterator(name);
if(!it.IsAtEnd() && (it.GetType() == cmCacheManager::UNINITIALIZED))
if(!it.IsAtEnd() && (it.GetType() == cmCacheManager::UNINITIALIZED) &&
it.Initialized())
{
val = it.GetValue();
}