diff options
Diffstat (limited to 'ACE/ace/Configuration.cpp')
-rw-r--r-- | ACE/ace/Configuration.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/ACE/ace/Configuration.cpp b/ACE/ace/Configuration.cpp index 039c2a1c192..3201b66bd4a 100644 --- a/ACE/ace/Configuration.cpp +++ b/ACE/ace/Configuration.cpp @@ -576,12 +576,47 @@ ACE_Configuration_Win32Registry::remove_section (const ACE_Configuration_Section } int errnum; +#if (ACE_HAS_WINNT4 != 0) errnum = ACE_TEXT_RegDeleteKey (base_key, sub_section); if (errnum != ERROR_SUCCESS) { errno = errnum; return -1; } +#else + if (!recursive) + { + ACE_Configuration_Section_Key section; + if (open_section (key, sub_section, 0, section)) + return -1; + + HKEY sub_key; + if (load_key (section, sub_key)) + return -1; + + ACE_TCHAR name_buffer[ACE_DEFAULT_BUFSIZE]; + DWORD buffer_size = ACE_DEFAULT_BUFSIZE; + // Check for a an entry under the sub_key + if (ACE_TEXT_RegEnumKeyEx (sub_key, + 0, + name_buffer, + &buffer_size, + 0, + 0, + 0, + 0) == ERROR_SUCCESS) + { + errno = ERROR_DIR_NOT_EMPTY; + return -1; + } + } + errnum = ACE_TEXT_RegDeleteKey (base_key, sub_section); + if (errnum != ERROR_SUCCESS) + { + errno = errnum; + return -1; + } +#endif return 0; } |