From 30b67a8bfe2b27d5bbaa9169f85d6ca382602d53 Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Fri, 16 Sep 2005 09:08:40 -0400 Subject: [PATCH] COMP: Win32 fixes --- Source/kwsys/Registry.cxx | 90 +++++++++++++++++++++++++----------- Source/kwsys/Registry.hxx.in | 5 +- 2 files changed, 64 insertions(+), 31 deletions(-) diff --git a/Source/kwsys/Registry.cxx b/Source/kwsys/Registry.cxx index b961760ce..1c3f1e647 100644 --- a/Source/kwsys/Registry.cxx +++ b/Source/kwsys/Registry.cxx @@ -25,6 +25,10 @@ #include // for isspace #include +#ifdef WIN32 +# include +#endif + #ifdef KWSYS_IOS_USE_ANSI # define VTK_IOS_NOCREATE #else @@ -64,9 +68,16 @@ public: void SetTopLevel(const char* tl); const char* GetTopLevel() { return m_TopLevel.c_str(); } + //! Read from local or global scope. On Windows this mean from local machine + // or local user. On unix this will read from $HOME/.Projectrc or + // /etc/Project + void SetGlobalScope(bool b); + bool GetGlobalScope(); + protected: bool m_Changed; kwsys_stl::string m_TopLevel; + bool m_GlobalScope; #ifdef WIN32 HKEY HKey; @@ -91,7 +102,6 @@ Registry::Registry(Registry::RegistryType registryType) { m_Opened = false; m_Locked = false; - m_GlobalScope = false; this->Helper = 0; this->Helper = new RegistryHelper(registryType); } @@ -108,6 +118,18 @@ Registry::~Registry() delete this->Helper; } +//---------------------------------------------------------------------------- +void Registry::SetGlobalScope(bool b) +{ + this->Helper->SetGlobalScope(b); +} + +//---------------------------------------------------------------------------- +bool Registry::GetGlobalScope() +{ + return this->Helper->GetGlobalScope(); +} + //---------------------------------------------------------------------------- bool Registry::Open(const char *toplevel, const char *subkey, int readonly) @@ -330,6 +352,7 @@ RegistryHelper::RegistryHelper(Registry::RegistryType registryType) m_SubKey = ""; m_SubKeySpecified = false; m_Empty = true; + m_GlobalScope = false; m_RegistryType = registryType; } @@ -344,7 +367,7 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey, int readonly) { #ifdef WIN32 - if ( m_RegistryType == Registry::RegistryType::WIN32) + if ( m_RegistryType == Registry::WIN32_REGISTRY) { HKEY scope = HKEY_CURRENT_USER; if ( this->GetGlobalScope() ) @@ -352,32 +375,31 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey, scope = HKEY_LOCAL_MACHINE; } int res = 0; - ostrstream str; + kwsys_ios::ostringstream str; DWORD dwDummy; - str << "Software\\Kitware\\" << toplevel << "\\" << subkey << ends; - if ( readonly == vtkKWRegistryUtilities::READONLY ) + str << "Software\\Kitware\\" << toplevel << "\\" << subkey; + if ( readonly == Registry::READONLY ) { - res = ( RegOpenKeyEx(scope, str.str(), + res = ( RegOpenKeyEx(scope, str.str().c_str(), 0, KEY_READ, &this->HKey) == ERROR_SUCCESS ); } else { - res = ( RegCreateKeyEx(scope, str.str(), + res = ( RegCreateKeyEx(scope, str.str().c_str(), 0, "", REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE, NULL, &this->HKey, &dwDummy) == ERROR_SUCCESS ); } - str.rdbuf()->freeze(0); - return res; + return (res != 0); } #endif if ( m_RegistryType == Registry::UNIX_REGISTRY ) { - int res = 0; + bool res = false; int cc; kwsys_ios::ostringstream str; if ( !getenv("HOME") ) { - return 0; + return false; } str << getenv("HOME") << "/." << toplevel << "rc"; if ( readonly == Registry::READWRITE ) @@ -385,7 +407,7 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey, kwsys_ios::ofstream ofs( str.str().c_str(), kwsys_ios::ios::out|kwsys_ios::ios::app ); if ( ofs.fail() ) { - return 0; + return false; } ofs.close(); } @@ -393,15 +415,15 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey, kwsys_ios::ifstream *ifs = new kwsys_ios::ifstream(str.str().c_str(), kwsys_ios::ios::in VTK_IOS_NOCREATE); if ( !ifs ) { - return 0; + return false; } if ( ifs->fail()) { delete ifs; - return 0; + return false; } - res = 1; + res = true; char buffer[BUFFER_SIZE]; while( !ifs->fail() ) { @@ -448,11 +470,11 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey, bool RegistryHelper::Close() { #ifdef WIN32 - if ( m_RegistryType == Registry::RegistryType::WIN32) + if ( m_RegistryType == Registry::WIN32_REGISTRY) { int res; res = ( RegCloseKey(this->HKey) == ERROR_SUCCESS ); - return res; + return (res != 0); } #else if ( m_RegistryType == Registry::UNIX_REGISTRY ) @@ -520,15 +542,15 @@ bool RegistryHelper::ReadValue(const char *skey, char *value) { #ifdef WIN32 - if ( m_RegistryType == Registry::RegistryType::WIN32) + if ( m_RegistryType == Registry::WIN32_REGISTRY) { int res = 1; DWORD dwType, dwSize; dwType = REG_SZ; dwSize = BUFFER_SIZE; - res = ( RegQueryValueEx(this->HKey, key, NULL, &dwType, + res = ( RegQueryValueEx(this->HKey, skey, NULL, &dwType, (BYTE *)value, &dwSize) == ERROR_SUCCESS ); - return res; + return (res != 0); } #else if ( m_RegistryType == Registry::UNIX_REGISTRY ) @@ -557,11 +579,11 @@ bool RegistryHelper::ReadValue(const char *skey, char *value) bool RegistryHelper::DeleteKey(const char* key) { #ifdef WIN32 - if ( m_RegistryType == Registry::RegistryType::WIN32) + if ( m_RegistryType == Registry::WIN32_REGISTRY) { int res = 1; res = ( RegDeleteKey( this->HKey, key ) == ERROR_SUCCESS ); - return res; + return (res != 0); } #else if ( m_RegistryType == Registry::UNIX_REGISTRY ) @@ -578,11 +600,11 @@ bool RegistryHelper::DeleteKey(const char* key) bool RegistryHelper::DeleteValue(const char *skey) { #ifdef WIN32 - if ( m_RegistryType == Registry::RegistryType::WIN32) + if ( m_RegistryType == Registry::WIN32_REGISTRY) { int res = 1; - res = ( RegDeleteValue( this->HKey, key ) == ERROR_SUCCESS ); - return res; + res = ( RegDeleteValue( this->HKey, skey ) == ERROR_SUCCESS ); + return (res != 0); } #else if ( m_RegistryType == Registry::UNIX_REGISTRY ) @@ -604,14 +626,14 @@ bool RegistryHelper::DeleteValue(const char *skey) bool RegistryHelper::SetValue(const char *skey, const char *value) { #ifdef WIN32 - if ( m_RegistryType == Registry::RegistryType::WIN32) + if ( m_RegistryType == Registry::WIN32_REGISTRY) { int res = 1; DWORD len = (DWORD)(value ? strlen(value) : 0); - res = ( RegSetValueEx(this->HKey, key, 0, REG_SZ, + res = ( RegSetValueEx(this->HKey, skey, 0, REG_SZ, (CONST BYTE *)(const char *)value, len+1) == ERROR_SUCCESS ); - return res; + return (res != 0); } #else if ( m_RegistryType == Registry::UNIX_REGISTRY ) @@ -688,4 +710,16 @@ char *RegistryHelper::Strip(char *str) return nstr; } +//---------------------------------------------------------------------------- +void RegistryHelper::SetGlobalScope(bool b) +{ + m_GlobalScope = b; +} + +//---------------------------------------------------------------------------- +bool RegistryHelper::GetGlobalScope() +{ + return m_GlobalScope; +} + } // namespace KWSYS_NAMESPACE diff --git a/Source/kwsys/Registry.hxx.in b/Source/kwsys/Registry.hxx.in index 408534abb..cc6df58cc 100644 --- a/Source/kwsys/Registry.hxx.in +++ b/Source/kwsys/Registry.hxx.in @@ -75,8 +75,8 @@ public: // /etc/Project void GlobalScopeOn() { this->SetGlobalScope(1); } void GlobalScopeOff() { this->SetGlobalScope(0); } - void SetGlobalScope(bool b) { m_GlobalScope = b; } - bool GetGlobalScope() { return m_GlobalScope; } + void SetGlobalScope(bool b); + bool GetGlobalScope(); // Set or get the toplevel registry key. void SetTopLevel(const char* tl); @@ -102,7 +102,6 @@ private: bool m_Opened; bool m_Locked; - bool m_GlobalScope; }; // End Class: Registry } // namespace @KWSYS_NAMESPACE@