X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4676948b6814c97b93c431a8cbcd8c0352c87ba9..e9b964cfe591532f21c31204032357899cc2cbad:/src/msw/registry.cpp diff --git a/src/msw/registry.cpp b/src/msw/registry.cpp index 7d8a62aca1..26657e9c5d 100644 --- a/src/msw/registry.cpp +++ b/src/msw/registry.cpp @@ -12,7 +12,7 @@ // - add high level functions (RegisterOleServer, ...) /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "registry.h" #endif @@ -36,7 +36,7 @@ #define WIN32_LEAN_AND_MEAN */ -#include +#include "wx/msw/wrapwin.h" #ifdef __WXWINCE__ #include "wx/msw/private.h" @@ -94,7 +94,7 @@ aStdKeys[] = // useful for Windows programmers: makes somewhat more clear all these zeroes // being passed to Windows APIs -#define RESERVED (NULL) +#define RESERVED (0) // ---------------------------------------------------------------------------- // macros @@ -376,31 +376,36 @@ bool wxRegKey::GetKeyInfo(size_t *pnSubKeys, // opens key (it's not an error to call Open() on an already opened key) bool wxRegKey::Open() { - if ( IsOpened() ) - return TRUE; + if ( IsOpened() ) + return TRUE; + + HKEY tmpKey; + m_dwLastError = ::RegOpenKeyEx + ( + (HKEY) m_hRootKey, + m_strKey, + RESERVED, + KEY_ALL_ACCESS, + &tmpKey + ); + + if ( m_dwLastError != ERROR_SUCCESS ) + { + wxLogSysError(m_dwLastError, _("Can't open registry key '%s'"), + GetName().c_str()); + return FALSE; + } - HKEY tmpKey; - m_dwLastError = RegOpenKeyEx((HKEY) m_hRootKey, m_strKey, - 0, 0, &tmpKey); - if ( m_dwLastError != ERROR_SUCCESS ) { - wxLogSysError(m_dwLastError, _("Can't open registry key '%s'"), - GetName().c_str()); - return FALSE; - } - else - { m_hKey = (WXHKEY) tmpKey; return TRUE; - } } // creates key, failing if it exists and !bOkIfExists bool wxRegKey::Create(bool bOkIfExists) { // check for existence only if asked (i.e. order is important!) - if ( !bOkIfExists && Exists() ) { + if ( !bOkIfExists && Exists() ) return FALSE; - } if ( IsOpened() ) return TRUE; @@ -678,7 +683,9 @@ bool wxRegKey::DeleteSelf() Close(); m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey); - if ( m_dwLastError != ERROR_SUCCESS ) { + // deleting a key which doesn't exist is not considered an error + if ( m_dwLastError != ERROR_SUCCESS && + m_dwLastError != ERROR_FILE_NOT_FOUND ) { wxLogSysError(m_dwLastError, _("Can't delete key '%s'"), GetName().c_str()); return FALSE; @@ -867,14 +874,12 @@ bool wxRegKey::QueryValue(const wxChar *szValue, strValue.Empty(); } else { - RegString pBuf = (RegString)strValue.GetWriteBuf(dwSize); m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED, &dwType, - pBuf, + (RegString)(wxChar*)wxStringBuffer(strValue, dwSize), &dwSize); - strValue.UngetWriteBuf(); // expand the var expansions in the string unless disabled #ifndef __WXWINCE__ @@ -888,10 +893,9 @@ bool wxRegKey::QueryValue(const wxChar *szValue, ok = ::ExpandEnvironmentStrings ( strValue, - strExpValue.GetWriteBuf(dwExpSize), + wxStringBuffer(strExpValue, dwExpSize), dwExpSize ) != 0; - strExpValue.UngetWriteBuf(); strValue = strExpValue; } @@ -1083,16 +1087,25 @@ bool wxRegKey::IsNumericValue(const wxChar *szValue) const bool KeyExists(WXHKEY hRootKey, const wxChar *szKey) { - // don't close this key itself for the case of empty szKey! - if ( wxIsEmpty(szKey) ) - return TRUE; + // don't close this key itself for the case of empty szKey! + if ( wxIsEmpty(szKey) ) + return TRUE; + + HKEY hkeyDummy; + if ( ::RegOpenKeyEx + ( + (HKEY)hRootKey, + szKey, + RESERVED, + KEY_ALL_ACCESS, + &hkeyDummy + ) == ERROR_SUCCESS ) + { + ::RegCloseKey(hkeyDummy); + + return TRUE; + } - HKEY hkeyDummy; - if ( RegOpenKeyEx( (HKEY) hRootKey, szKey, 0, 0, &hkeyDummy) == ERROR_SUCCESS ) { - RegCloseKey(hkeyDummy); - return TRUE; - } - else return FALSE; }