ENH: More handling of unix versus windows registry
This commit is contained in:
parent
0b30d23085
commit
df4f999457
|
@ -441,70 +441,78 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey,
|
||||||
delete ifs;
|
delete ifs;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool RegistryHelper::Close()
|
bool RegistryHelper::Close()
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int res;
|
if ( m_RegistryType == Registry::RegistryType::WIN32)
|
||||||
res = ( RegCloseKey(this->HKey) == ERROR_SUCCESS );
|
|
||||||
return res;
|
|
||||||
#else
|
|
||||||
int res = 0;
|
|
||||||
if ( !m_Changed )
|
|
||||||
{
|
{
|
||||||
|
int res;
|
||||||
|
res = ( RegCloseKey(this->HKey) == ERROR_SUCCESS );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if ( m_RegistryType == Registry::UNIX_REGISTRY )
|
||||||
|
{
|
||||||
|
int res = 0;
|
||||||
|
if ( !m_Changed )
|
||||||
|
{
|
||||||
|
this->EntriesMap.erase(
|
||||||
|
this->EntriesMap.begin(),
|
||||||
|
this->EntriesMap.end());
|
||||||
|
m_Empty = 1;
|
||||||
|
this->SetSubKey(0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
kwsys_ios::ostringstream str;
|
||||||
|
if ( !getenv("HOME") )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
str << getenv("HOME") << "/." << this->GetTopLevel() << "rc";
|
||||||
|
kwsys_ios::ofstream *ofs = new kwsys_ios::ofstream(str.str().c_str(), kwsys_ios::ios::out);
|
||||||
|
if ( !ofs )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( ofs->fail())
|
||||||
|
{
|
||||||
|
delete ofs;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*ofs << "# This file is automatically generated by the application" << kwsys_ios::endl
|
||||||
|
<< "# If you change any lines or add new lines, note that all" << kwsys_ios::endl
|
||||||
|
<< "# coments and empty lines will be deleted. Every line has" << kwsys_ios::endl
|
||||||
|
<< "# to be in format: " << kwsys_ios::endl
|
||||||
|
<< "# key = value" << kwsys_ios::endl
|
||||||
|
<< "#" << kwsys_ios::endl;
|
||||||
|
|
||||||
|
if ( !this->EntriesMap.empty() )
|
||||||
|
{
|
||||||
|
RegistryHelper::StringToStringMap::iterator it;
|
||||||
|
for ( it = this->EntriesMap.begin();
|
||||||
|
it != this->EntriesMap.end();
|
||||||
|
++ it )
|
||||||
|
{
|
||||||
|
*ofs << it->first.c_str() << " = " << it->second.c_str()<< kwsys_ios::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
this->EntriesMap.erase(
|
this->EntriesMap.erase(
|
||||||
this->EntriesMap.begin(),
|
this->EntriesMap.begin(),
|
||||||
this->EntriesMap.end());
|
this->EntriesMap.end());
|
||||||
m_Empty = 1;
|
ofs->close();
|
||||||
this->SetSubKey(0);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
kwsys_ios::ostringstream str;
|
|
||||||
if ( !getenv("HOME") )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
str << getenv("HOME") << "/." << this->GetTopLevel() << "rc";
|
|
||||||
kwsys_ios::ofstream *ofs = new kwsys_ios::ofstream(str.str().c_str(), kwsys_ios::ios::out);
|
|
||||||
if ( !ofs )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( ofs->fail())
|
|
||||||
{
|
|
||||||
delete ofs;
|
delete ofs;
|
||||||
return 0;
|
res = 1;
|
||||||
|
this->SetSubKey(0);
|
||||||
|
m_Empty = 1;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
*ofs << "# This file is automatically generated by the application" << kwsys_ios::endl
|
|
||||||
<< "# If you change any lines or add new lines, note that all" << kwsys_ios::endl
|
|
||||||
<< "# coments and empty lines will be deleted. Every line has" << kwsys_ios::endl
|
|
||||||
<< "# to be in format: " << kwsys_ios::endl
|
|
||||||
<< "# key = value" << kwsys_ios::endl
|
|
||||||
<< "#" << kwsys_ios::endl;
|
|
||||||
|
|
||||||
if ( !this->EntriesMap.empty() )
|
|
||||||
{
|
|
||||||
RegistryHelper::StringToStringMap::iterator it;
|
|
||||||
for ( it = this->EntriesMap.begin();
|
|
||||||
it != this->EntriesMap.end();
|
|
||||||
++ it )
|
|
||||||
{
|
|
||||||
*ofs << it->first.c_str() << " = " << it->second.c_str()<< kwsys_ios::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->EntriesMap.erase(
|
|
||||||
this->EntriesMap.begin(),
|
|
||||||
this->EntriesMap.end());
|
|
||||||
ofs->close();
|
|
||||||
delete ofs;
|
|
||||||
res = 1;
|
|
||||||
this->SetSubKey(0);
|
|
||||||
m_Empty = 1;
|
|
||||||
return res;
|
|
||||||
#endif
|
#endif
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -512,92 +520,118 @@ bool RegistryHelper::ReadValue(const char *skey, char *value)
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int res = 1;
|
if ( m_RegistryType == Registry::RegistryType::WIN32)
|
||||||
DWORD dwType, dwSize;
|
{
|
||||||
dwType = REG_SZ;
|
int res = 1;
|
||||||
dwSize = BUFFER_SIZE;
|
DWORD dwType, dwSize;
|
||||||
res = ( RegQueryValueEx(this->HKey, key, NULL, &dwType,
|
dwType = REG_SZ;
|
||||||
(BYTE *)value, &dwSize) == ERROR_SUCCESS );
|
dwSize = BUFFER_SIZE;
|
||||||
return res;
|
res = ( RegQueryValueEx(this->HKey, key, NULL, &dwType,
|
||||||
|
(BYTE *)value, &dwSize) == ERROR_SUCCESS );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
int res = 0;
|
if ( m_RegistryType == Registry::UNIX_REGISTRY )
|
||||||
char *key = this->CreateKey( skey );
|
|
||||||
if ( !key )
|
|
||||||
{
|
{
|
||||||
return 0;
|
int res = 0;
|
||||||
|
char *key = this->CreateKey( skey );
|
||||||
|
if ( !key )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
RegistryHelper::StringToStringMap::iterator it
|
||||||
|
= this->EntriesMap.find(key);
|
||||||
|
if ( it != this->EntriesMap.end() )
|
||||||
|
{
|
||||||
|
strcpy(value, it->second.c_str());
|
||||||
|
res = 1;
|
||||||
|
}
|
||||||
|
delete [] key;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
RegistryHelper::StringToStringMap::iterator it
|
|
||||||
= this->EntriesMap.find(key);
|
|
||||||
if ( it != this->EntriesMap.end() )
|
|
||||||
{
|
|
||||||
strcpy(value, it->second.c_str());
|
|
||||||
res = 1;
|
|
||||||
}
|
|
||||||
delete [] key;
|
|
||||||
return res;
|
|
||||||
#endif
|
#endif
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool RegistryHelper::DeleteKey(const char* key)
|
bool RegistryHelper::DeleteKey(const char* key)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int res = 1;
|
if ( m_RegistryType == Registry::RegistryType::WIN32)
|
||||||
res = ( RegDeleteKey( this->HKey, key ) == ERROR_SUCCESS );
|
{
|
||||||
return res;
|
int res = 1;
|
||||||
|
res = ( RegDeleteKey( this->HKey, key ) == ERROR_SUCCESS );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
(void)key;
|
if ( m_RegistryType == Registry::UNIX_REGISTRY )
|
||||||
int res = 0;
|
{
|
||||||
return res;
|
(void)key;
|
||||||
|
int res = 0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool RegistryHelper::DeleteValue(const char *skey)
|
bool RegistryHelper::DeleteValue(const char *skey)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int res = 1;
|
if ( m_RegistryType == Registry::RegistryType::WIN32)
|
||||||
res = ( RegDeleteValue( this->HKey, key ) == ERROR_SUCCESS );
|
|
||||||
return res;
|
|
||||||
#else
|
|
||||||
char *key = this->CreateKey( skey );
|
|
||||||
if ( !key )
|
|
||||||
{
|
{
|
||||||
return 0;
|
int res = 1;
|
||||||
|
res = ( RegDeleteValue( this->HKey, key ) == ERROR_SUCCESS );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if ( m_RegistryType == Registry::UNIX_REGISTRY )
|
||||||
|
{
|
||||||
|
char *key = this->CreateKey( skey );
|
||||||
|
if ( !key )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
this->EntriesMap.erase(key);
|
||||||
|
delete [] key;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
this->EntriesMap.erase(key);
|
|
||||||
delete [] key;
|
|
||||||
return 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool RegistryHelper::SetValue(const char *skey, const char *value)
|
bool RegistryHelper::SetValue(const char *skey, const char *value)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int res = 1;
|
if ( m_RegistryType == Registry::RegistryType::WIN32)
|
||||||
DWORD len = (DWORD)(value ? strlen(value) : 0);
|
|
||||||
res = ( RegSetValueEx(this->HKey, key, 0, REG_SZ,
|
|
||||||
(CONST BYTE *)(const char *)value,
|
|
||||||
len+1) == ERROR_SUCCESS );
|
|
||||||
return res;
|
|
||||||
#else
|
|
||||||
char *key = this->CreateKey( skey );
|
|
||||||
if ( !key )
|
|
||||||
{
|
{
|
||||||
return 0;
|
int res = 1;
|
||||||
|
DWORD len = (DWORD)(value ? strlen(value) : 0);
|
||||||
|
res = ( RegSetValueEx(this->HKey, key, 0, REG_SZ,
|
||||||
|
(CONST BYTE *)(const char *)value,
|
||||||
|
len+1) == ERROR_SUCCESS );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if ( m_RegistryType == Registry::UNIX_REGISTRY )
|
||||||
|
{
|
||||||
|
char *key = this->CreateKey( skey );
|
||||||
|
if ( !key )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
this->EntriesMap[key] = value;
|
||||||
|
delete [] key;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
this->EntriesMap[key] = value;
|
|
||||||
delete [] key;
|
|
||||||
return 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
char *RegistryHelper::CreateKey( const char *key )
|
char *RegistryHelper::CreateKey( const char *key )
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
|
||||||
#else
|
|
||||||
char *newkey;
|
char *newkey;
|
||||||
if ( !m_SubKeySpecified || m_SubKey.empty() || !key )
|
if ( !m_SubKeySpecified || m_SubKey.empty() || !key )
|
||||||
{
|
{
|
||||||
|
@ -607,7 +641,6 @@ char *RegistryHelper::CreateKey( const char *key )
|
||||||
newkey = new char[ len+1 ] ;
|
newkey = new char[ len+1 ] ;
|
||||||
::sprintf(newkey, "%s\\%s", this->m_SubKey.c_str(), key);
|
::sprintf(newkey, "%s\\%s", this->m_SubKey.c_str(), key);
|
||||||
return newkey;
|
return newkey;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegistryHelper::SetSubKey(const char* sk)
|
void RegistryHelper::SetSubKey(const char* sk)
|
||||||
|
|
Loading…
Reference in New Issue