configmgr/source/winreg.cxx |   37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

New commits:
commit 4760c7eec662b2bf8dcf0ce0012584cf98b21702
Author: Andras Timar <andras.ti...@collabora.com>
Date:   Mon May 7 12:23:02 2018 -0700

    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.kagan...@collabora.com>
    Tested-by: Mike Kaganski <mike.kagan...@collabora.com>

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);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to