summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2017-03-08 13:57:58 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-03-10 12:45:59 +0000
commitc095f036d4e0c61831178384e5a27a87c86363cb (patch)
tree08d6b74dd2496180b67ba3d6c477630e26a54487
parent23b8a097090ad544c596e644cf477feb360c9469 (diff)
tdf#106283: Registry settings are not read properly on Windows
Read also a type value from registry so user can specify a type for a property of an extensible group. Reviewed-on: https://gerrit.libreoffice.org/34961 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com> (cherry picked from commit 145accd9a5b55070959d40c9314d870dffa5e4bc) Change-Id: I4105ba559a64ce96bfe5a390660ad7f349ba894c Reviewed-on: https://gerrit.libreoffice.org/34973 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r--configmgr/source/winreg.cxx22
1 files changed, 22 insertions, 0 deletions
diff --git a/configmgr/source/winreg.cxx b/configmgr/source/winreg.cxx
index c2e709b15686..ef7e212c9e8f 100644
--- a/configmgr/source/winreg.cxx
+++ b/configmgr/source/winreg.cxx
@@ -66,6 +66,18 @@ namespace {
// </node>
// </node>
// </item>
+//
+// Third example (property of an extensible group -> needs type):
+// [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\LibreOffice\org.openoffice.Office.Jobs\Jobs\org.openoffice.Office.Jobs:Job['UpdateCheck']\Arguments\AutoCheckEnabled]
+// "Value"="false"
+// "Final"=dword:00000001
+// "Type"="xs:boolean"
+// becomes the following in configuration:
+// <item oor:path="/org.openoffice.Office.Jobs/Jobs/org.openoffice.Office.Jobs:Job['UpdateCheck']/Arguments">
+// <prop oor:name="AutoCheckEnabled" oor:type="xs::boolean" oor:finalized="true">
+// <value>false</value>
+// </prop>
+// </item>
void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFileHandle)
{
@@ -108,6 +120,7 @@ void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFil
bool bFinal = false;
OUString aValue;
+ OUString aType;
for(DWORD i = 0; i < nValues; ++i)
{
@@ -117,9 +130,12 @@ void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFil
RegEnumValueW(hCurKey, i, pValueName, &nValueNameLen, nullptr, nullptr, reinterpret_cast<LPBYTE>(pValue), &nValueLen);
const wchar_t wsValue[] = L"Value";
const wchar_t wsFinal[] = L"Final";
+ const wchar_t wsType[] = L"Type";
if(!wcscmp(pValueName, wsValue))
aValue = OUString(pValue);
+ if(!wcscmp(pValueName, wsType))
+ aType = OUString(pValue);
if(!wcscmp(pValueName, wsFinal) && *reinterpret_cast<DWORD*>(pValue) == 1)
bFinal = true;
}
@@ -169,6 +185,12 @@ void dumpWindowsRegistryKey(HKEY hKey, OUString const & aKeyName, TempFile &aFil
writeData(aFileHandle, "<prop oor:name=\"");
writeAttributeValue(aFileHandle, aProp);
writeData(aFileHandle, "\"");
+ if(!aType.isEmpty())
+ {
+ writeData(aFileHandle, " oor:type=\"");
+ writeAttributeValue(aFileHandle, aType);
+ writeData(aFileHandle, "\"");
+ }
if(bFinal)
writeData(aFileHandle, " oor:finalized=\"true\"");
writeData(aFileHandle, "><value>");