diff options
author | Andras Timar <andras.timar@collabora.com> | 2018-05-07 12:23:02 -0700 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2018-05-08 11:56:23 +0200 |
commit | 4760c7eec662b2bf8dcf0ce0012584cf98b21702 (patch) | |
tree | 4bdcb7e90560b356c63102ba7428b7b678dd8a2f /configmgr | |
parent | b2f445b52a4943d1a833f847a65c197038475f00 (diff) |
Add possibility to read <value xsi:nil="true"/> from winreg conf backend
Change-Id: I67bc14d7ee1bacc15d34e6ee25ca7638de268643
Reviewed-on: https://gerrit.libreoffice.org/53942
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'configmgr')
-rw-r--r-- | configmgr/source/winreg.cxx | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/configmgr/source/winreg.cxx b/configmgr/source/winreg.cxx index dd85bb43d7e1..08c56f2a6b64 100644 --- a/configmgr/source/winreg.cxx +++ b/configmgr/source/winreg.cxx @@ -40,7 +40,8 @@ namespace { // Last element of Key becomes prop, first part is the path and optionally nodes, // when the node has oor:op attribute. // Values can be the following: Value (string), Type (string, optional), -// Final (dword, optional), External (dword, optional), ExternalBackend (string, optional) +// Final (dword, optional), External (dword, optional), ExternalBackend (string, optional), +// Nil (dword, optional) // // For example the following registry setting: // [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\LibreOffice\org.openoffice.UserProfile\Data\o] @@ -95,6 +96,28 @@ namespace { // <value oor:external="com.sun.star.configuration.backend.LdapUserProfileBe company"/> // </prop> // </item> +// +// Nil example: +// Empty value (<value></value>) and nil value (<value xsi:nil="true"/>) are different. +// In case of some path settings, the base path setting has to be cleared. +// [HKEY_CURRENT_USER\Software\Policies\LibreOffice\org.openoffice.Office.Common\Path\Current\Work] +// "Value"="" +// "Final"=dword:00000001 +// "Nil"=dword:00000001 +// [HKEY_CURRENT_USER\Software\Policies\LibreOffice\org.openoffice.Office.Paths\Paths\org.openoffice.Office.Paths:NamedPath['Work']\WritePath] +// "Value"="file:///H:/" +// "Final"=dword:00000001 +// becomes the following in configuration: +// <item oor:path="/org.openoffice.Office.Common/Path/Current"> +// <prop oor:name="Work" oor:finalized="true"> +// <value xsi:nil="true"/> +// </prop> +// </item> +// <item oor:path="/org.openoffice.Office.Paths/Paths/org.openoffice.Office.Paths:NamedPath['Work']"> +// <prop oor:name="WritePath" oor:finalized="true"> +// <value>file:///H:/</value> +// </prop> +// </item> void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFileHandle) { @@ -142,6 +165,7 @@ void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFil bool bFinal = false; bool bExternal = false; + bool bNil = false; OUString aValue; OUString aType; OUString aExternalBackend; @@ -162,6 +186,11 @@ void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFil if (*reinterpret_cast<DWORD*>(pValue.get()) == 1) bFinal = true; } + else if (!wcscmp(pValueName.get(), L"Nil")) + { + if (*reinterpret_cast<DWORD*>(pValue.get()) == 1) + bNil = true; + } else if (!wcscmp(pValueName.get(), L"External")) { if (*reinterpret_cast<DWORD*>(pValue.get()) == 1) @@ -237,7 +266,11 @@ void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFil if(bFinal) aFileHandle.writeString(" oor:finalized=\"true\""); aFileHandle.writeString("><value"); - if (bExternal) + if (aValue.isEmpty() && bNil) + { + aFileHandle.writeString(" xsi:nil=\"true\"/"); + } + else if (bExternal) { aFileHandle.writeString(" oor:external=\""); writeAttributeValue(aFileHandle, aValue); |