[Libreoffice-commits] core.git: 4 commits - odk/CustomTarget_check.mk odk/util registry/CustomTarget_regcompare_test.mk registry/Executable_regcompare.mk registry/Module_registry.mk registry/test registry/tools Repository.mk unoidl/source xmloff/source

Stephan Bergmann sbergman at redhat.com
Thu Feb 4 14:57:26 UTC 2016


 Repository.mk                            |    3 
 odk/CustomTarget_check.mk                |    2 
 odk/util/check.pl                        |    2 
 registry/CustomTarget_regcompare_test.mk |  147 ++
 registry/Executable_regcompare.mk        |   26 
 registry/Module_registry.mk              |    6 
 registry/test/regcompare/makefile.mk     |   98 -
 registry/tools/regcompare.cxx            | 2075 -------------------------------
 unoidl/source/unoidl-check.cxx           |   52 
 xmloff/source/text/txtlists.cxx          |    8 
 10 files changed, 192 insertions(+), 2227 deletions(-)

New commits:
commit 9599cf88b1179e7727c7fa5a32c3dbb1635f4d00
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Feb 4 15:56:46 2016 +0100

    Replace push(std::make_tuple(...)) with emplace(...)
    
    ...the former reportedly caused problems now with GCC 6 libstdc++
    
    Change-Id: I4b13adc71d9e00b14df1c8e875dba9e90cbcdcc7

diff --git a/xmloff/source/text/txtlists.cxx b/xmloff/source/text/txtlists.cxx
index 2ec8dff..84f54ab 100644
--- a/xmloff/source/text/txtlists.cxx
+++ b/xmloff/source/text/txtlists.cxx
@@ -76,17 +76,17 @@ XMLTextListsHelper::~XMLTextListsHelper()
 void XMLTextListsHelper::PushListContext(
     XMLTextListBlockContext *i_pListBlock)
 {
-    mListStack.push(std::make_tuple(i_pListBlock,
+    mListStack.emplace(i_pListBlock,
         static_cast<XMLTextListItemContext*>(nullptr),
-        static_cast<XMLNumberedParaContext*>(nullptr)));
+        static_cast<XMLNumberedParaContext*>(nullptr));
 }
 
 void XMLTextListsHelper::PushListContext(
     XMLNumberedParaContext *i_pNumberedParagraph)
 {
-    mListStack.push(std::make_tuple(
+    mListStack.emplace(
         static_cast<XMLTextListBlockContext*>(nullptr),
-        static_cast<XMLTextListItemContext*>(nullptr), i_pNumberedParagraph));
+        static_cast<XMLTextListItemContext*>(nullptr), i_pNumberedParagraph);
 }
 
 void XMLTextListsHelper::PopListContext()
commit 532b47a650ce5189e1fb759201129d7d1f434133
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Feb 4 15:51:08 2016 +0100

    [ABI CHANGE] In SDK, replace regcompare with unoidl-check
    
    ...as the latter was the more flexible replacement for the former for LO-
    internal use already.  The only gotcha to watch out for is that unoidl-check
    cannot be used to check "naked" .urd files, but only ones where the content has
    been moved to /UCR via regmerge.
    
    Leave registry/CustomTarget_regcompare_test.mk around to verify that
    unoidl-check behaves the same as did regcompare on those old-format .urd/.rdb
    files.
    
    Change-Id: Ic13ede48535bf942126c810d88bac7e4081d984e

diff --git a/Repository.mk b/Repository.mk
index 56b1708..6ca3184 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -58,7 +58,6 @@ $(eval $(call gb_Helper_register_executables,NONE, \
 	treex \
 	uiex \
 	ulfex \
-	unoidl-check \
 	unoidl-read \
 	unoidl-write \
 	xrmex \
@@ -82,9 +81,9 @@ $(eval $(call gb_Helper_register_executables_for_install,SDK,sdk, \
 	cppumaker \
 	idlc \
 	javamaker \
-	regcompare \
 	$(if $(filter UCPP,$(BUILD_TYPE)),ucpp) \
 	$(if $(filter ODK,$(BUILD_TYPE)),unoapploader) \
+	unoidl-check \
 	$(if $(filter ODK,$(BUILD_TYPE)),uno-skeletonmaker) \
 ))
 
diff --git a/odk/CustomTarget_check.mk b/odk/CustomTarget_check.mk
index 59e4d60..109a0c9 100644
--- a/odk/CustomTarget_check.mk
+++ b/odk/CustomTarget_check.mk
@@ -28,7 +28,7 @@ odk_PLATFORM := $(if $(filter WNT,$(OS)),\
 $(call gb_CustomTarget_get_workdir,odk/check)/checkbin : \
 		$(SRCDIR)/odk/util/check.pl \
 		$(if $(DOXYGEN),$(call gb_GeneratedPackage_get_target,odk_doxygen)) \
-		$(foreach exe,$(if $(filter WNT,$(OS)),climaker) cppumaker idlc javamaker regcompare $(if $(SYSTEM_UCPP),,ucpp) uno-skeletonmaker unoapploader,\
+		$(foreach exe,$(if $(filter WNT,$(OS)),climaker) cppumaker idlc javamaker $(if $(SYSTEM_UCPP),,ucpp) uno-skeletonmaker unoapploader unoidl-check,\
 			$(call gb_Executable_get_target,$(exe))) \
 		$(if $(filter WNT,$(OS)),$(call gb_Package_get_target,odk_cli)) \
 		$(call gb_Package_get_target,odk_config) \
diff --git a/odk/util/check.pl b/odk/util/check.pl
index b8f1074..8dfbfcc 100644
--- a/odk/util/check.pl
+++ b/odk/util/check.pl
@@ -46,7 +46,7 @@ if (-d "$SdkDir") {
     print "check binaries: ";
     if (check_dir("bin")) {
 	my @binarylist = ( "idlc","cppumaker","javamaker",
-               "regcompare",
+               "unoidl-check",
                "unoapploader", "uno-skeletonmaker" );
     if ($ENV{SYSTEM_UCPP} eq "") {
 	push @binarylist,"ucpp";
diff --git a/registry/CustomTarget_regcompare_test.mk b/registry/CustomTarget_regcompare_test.mk
index d0781db..b584d3f 100644
--- a/registry/CustomTarget_regcompare_test.mk
+++ b/registry/CustomTarget_regcompare_test.mk
@@ -22,114 +22,120 @@ $(eval $(call gb_CustomTarget_CustomTarget,registry/regcompare_test))
 .PHONY: $(call gb_CustomTarget_get_target,registry/regcompare_test)
 
 $(call gb_CustomTarget_get_target,registry/regcompare_test): \
-        $(call gb_Executable_get_runtime_dependencies,regcompare) \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.urd
+        $(call gb_Executable_get_runtime_dependencies,unoidl-check) \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.rdb
 	$(call gb_Helper_abbreviate_dirs,( \
-        $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.urd \
-        && $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.urd \
-        && ! $(call gb_Executable_get_command,regcompare) -f -t -u \
-            -r1 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.urd \
-            -r2 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.urd) \
+        $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+        && echo 1 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.rdb \
+        && echo 2 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+        && echo 3 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.rdb \
+        && echo 4 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.rdb \
+        && echo 5 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.rdb \
+        && echo 6 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.rdb \
+        && echo 7 && ! $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.rdb \
+        && echo 8 && $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+        && echo 9 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.rdb \
+        && echo 10 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+        && echo 11 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.rdb \
+        && echo 12 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.rdb \
+        && echo 13 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.rdb \
+        && echo 14 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.rdb \
+        && echo 15 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.rdb \
+        && echo 16 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+        && echo 17 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.rdb \
+        && echo 18 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+        && echo 19 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.rdb \
+        && echo 20 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.rdb \
+        && echo 21 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.rdb \
+        && echo 22 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.rdb \
+        && echo 23 && $(call gb_Executable_get_command,unoidl-check) --ignore-unpublished \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.rdb \
+        && echo 24 && $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psa.rdb \
+        && echo 25 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/psb.rdb \
+        && echo 26 && $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+        && echo 27 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usb.rdb \
+        && echo 28 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/pe.rdb \
+        && echo 29 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/ue.rdb \
+        && echo 30 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other1.rdb \
+        && echo 31 && ! $(call gb_Executable_get_command,unoidl-check) \
+            $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/usa.rdb \
+            -- $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/other2.rdb) \
         > $@.log 2>&1 || (cat $@.log && false))
 
+$(call gb_CustomTarget_get_workdir,registry/regcompare_test)/%.rdb: \
+        $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/%.urd \
+        $(call gb_Executable_get_runtime_dependencies,regmerge)
+	$(call gb_Helper_abbreviate_dirs,( \
+        $(call gb_Executable_get_command,regmerge) $@ /UCR $<))
+
 $(call gb_CustomTarget_get_workdir,registry/regcompare_test)/%.urd: \
         $(SRCDIR)/registry/test/regcompare/%.idl \
         $(call gb_Executable_get_runtime_dependencies,idlc)
diff --git a/registry/Executable_regcompare.mk b/registry/Executable_regcompare.mk
deleted file mode 100644
index d909872..0000000
--- a/registry/Executable_regcompare.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_Executable_Executable,regcompare))
-
-$(eval $(call gb_Executable_use_libraries,regcompare,\
-    sal \
-    salhelper \
-    reg \
-))
-
-$(eval $(call gb_Executable_use_static_libraries,regcompare,\
-    registry_helper \
-))
-
-$(eval $(call gb_Executable_add_exception_objects,regcompare,\
-    registry/tools/regcompare \
-))
-
-# vim:set noet sw=4 ts=4:
diff --git a/registry/Module_registry.mk b/registry/Module_registry.mk
index ec476c9..cbb052e 100644
--- a/registry/Module_registry.mk
+++ b/registry/Module_registry.mk
@@ -18,11 +18,7 @@ $(eval $(call gb_Module_add_targets,registry,\
 	) \
 ))
 
-ifneq (,$(filter ODK,$(BUILD_TYPE)))
-
-$(eval $(call gb_Module_add_targets,registry,\
-	Executable_regcompare \
-))
+ifneq ($(OS),IOS) # missing regmerge (see above), needed within test
 
 $(eval $(call gb_Module_add_check_targets,registry, \
     CustomTarget_regcompare_test \
diff --git a/registry/tools/regcompare.cxx b/registry/tools/regcompare.cxx
deleted file mode 100644
index 901f719..0000000
--- a/registry/tools/regcompare.cxx
+++ /dev/null
@@ -1,2075 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include "registry/registry.hxx"
-#include "registry/reader.hxx"
-#include "registry/version.h"
-#include "fileurl.hxx"
-#include "options.hxx"
-
-#include <rtl/ustring.hxx>
-#include <rtl/math.hxx>
-#include <osl/diagnose.h>
-
-#include <stdio.h>
-#include <string.h>
-
-#include <set>
-#include <vector>
-#include <string>
-
-using namespace registry::tools;
-
-typedef std::set< OUString > StringSet;
-
-class Options_Impl : public Options
-{
-public:
-    explicit Options_Impl(char const * program)
-        : Options(program),
-          m_bFullCheck(false),
-          m_bForceOutput(false),
-          m_bUnoTypeCheck(false),
-          m_checkUnpublished(false)
-        {}
-
-    std::string const & getRegName1() const { return m_regName1; }
-    std::string const & getRegName2() const { return m_regName2; }
-
-    bool isStartKeyValid() const { return !m_startKey.isEmpty(); }
-    OUString const & getStartKey() const { return m_startKey; }
-    bool matchedWithExcludeKey( const OUString& keyName) const;
-
-    bool fullCheck() const { return m_bFullCheck; }
-    bool forceOutput() const { return m_bForceOutput; }
-    bool unoTypeCheck() const { return m_bUnoTypeCheck; }
-    bool checkUnpublished() const { return m_checkUnpublished; }
-
-protected:
-    bool setRegName_Impl(char c, std::string const & param);
-
-    virtual void printUsage_Impl() const override;
-    virtual bool initOptions_Impl (std::vector< std::string > & rArgs) override;
-
-    std::string m_regName1;
-    std::string m_regName2;
-    OUString    m_startKey;
-    StringSet   m_excludeKeys;
-    bool m_bFullCheck;
-    bool m_bForceOutput;
-    bool m_bUnoTypeCheck;
-    bool m_checkUnpublished;
-};
-
-#define U2S( s ) OUStringToOString(s, RTL_TEXTENCODING_UTF8).getStr()
-
-inline OUString makeOUString (std::string const & s)
-{
-    return OUString(s.c_str(), s.size(), RTL_TEXTENCODING_UTF8, OSTRING_TO_OUSTRING_CVTFLAGS);
-}
-
-inline OUString shortName(OUString const & fullName)
-{
-    return fullName.copy(fullName.lastIndexOf('/') + 1);
-}
-
-bool Options_Impl::setRegName_Impl(char c, std::string const & param)
-{
-    bool one = (c == '1'), two = (c == '2');
-    if (one)
-        m_regName1 = param;
-    if (two)
-        m_regName2 = param;
-    return (one || two);
-}
-
-//virtual
-void Options_Impl::printUsage_Impl() const
-{
-    std::string const & rProgName = getProgramName();
-    fprintf(stderr,
-            "Usage: %s -r1<filename> -r2<filename> [-options] | @<filename>\n", rProgName.c_str()
-            );
-    fprintf(stderr,
-            "    -r1<filename>  = filename specifies the name of the first registry.\n"
-            "    -r2<filename>  = filename specifies the name of the second registry.\n"
-            "    @<filename>    = filename specifies a command file.\n"
-            "Options:\n"
-            "    -s<name>  = name specifies the name of a start key. If no start key\n"
-            "     |S<name>   is specified the comparison starts with the root key.\n"
-            "    -x<name>  = name specifies the name of a key which won't be compared. All\n"
-            "     |X<name>   subkeys won't be compared also. This option can be used more than once.\n"
-            "    -f|F      = force the detailed output of any differences. Default\n"
-            "                is that only the number of differences is returned.\n"
-            "    -c|C      = make a complete check, that means any differences will be\n"
-            "                detected. Default is only a compatibility check that means\n"
-            "                only UNO typelibrary entries will be checked.\n"
-            "    -t|T      = make an UNO type compatibility check. This means that registry 2\n"
-            "                will be checked against registry 1. If a interface in r2 contains\n"
-            "                more methods or the methods are in a different order as in r1, r2 is\n"
-            "                incompatible to r1. But if a service in r2 supports more properties as\n"
-            "                in r1 and the new properties are 'optional' it is compatible.\n"
-            "    -u|U      = additionally check types that are unpublished in registry 1.\n"
-            "    -h|-?     = print this help message and exit.\n"
-            );
-    fprintf(stderr,
-            "\n%s Version 1.0\n\n", rProgName.c_str()
-            );
-}
-
-// virtual
-bool Options_Impl::initOptions_Impl (std::vector< std::string > & rArgs)
-{
-    std::vector< std::string >::const_iterator first = rArgs.begin(), last = rArgs.end();
-    for (; first != last; ++first)
-    {
-        if ((*first)[0] != '-')
-        {
-            return badOption("invalid", (*first).c_str());
-        }
-        switch ((*first)[1])
-        {
-        case 'r':
-        case 'R':
-            {
-                if (!((++first != last) && ((*first)[0] != '-')))
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-
-                std::string option(*first), param;
-                if (option.size() == 1)
-                {
-                    // "-r<n><space><param>"
-                    if (!((++first != last) && ((*first)[0] != '-')))
-                    {
-                        return badOption("invalid", (*first).c_str());
-                    }
-                    param = (*first);
-                }
-                else
-                {
-                    // "-r<n><param>"
-                    param = std::string(&(option[1]), option.size() - 1);
-                }
-                if (!setRegName_Impl(option[0], param))
-                {
-                    return badOption("invalid", option.c_str());
-                }
-                break;
-            }
-        case 's':
-        case 'S':
-            {
-                if (!((++first != last) && ((*first)[0] != '-')))
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                m_startKey = makeOUString(*first);
-                break;
-            }
-        case 'x':
-        case 'X':
-            {
-                if (!((++first != last) && ((*first)[0] != '-')))
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                m_excludeKeys.insert(makeOUString(*first));
-                break;
-            }
-        case 'f':
-        case 'F':
-            {
-                if ((*first).size() > 2)
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                m_bForceOutput = true;
-                break;
-            }
-        case 'c':
-        case 'C':
-            {
-                if ((*first).size() > 2)
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                m_bFullCheck = true;
-                break;
-            }
-        case 't':
-        case 'T':
-            {
-                if ((*first).size() > 2)
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                m_bUnoTypeCheck = true;
-                break;
-            }
-        case 'u':
-        case 'U':
-            {
-                if ((*first).size() > 2)
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                m_checkUnpublished = true;
-                break;
-            }
-        case 'h':
-        case '?':
-            {
-                if ((*first).size() > 2)
-                {
-                    return badOption("invalid", (*first).c_str());
-                }
-                return printUsage();
-            }
-        default:
-            {
-                return badOption("unknown", (*first).c_str());
-            }
-        }
-    }
-
-    if ( m_regName1.empty() )
-    {
-        return badOption("missing", "-r1");
-    }
-    if ( m_regName2.empty() )
-    {
-        return badOption("missing", "-r2");
-    }
-    return true;
-}
-
-bool Options_Impl::matchedWithExcludeKey( const OUString& keyName) const
-{
-    if (!m_excludeKeys.empty())
-    {
-        StringSet::const_iterator first = m_excludeKeys.begin(), last = m_excludeKeys.end();
-        for (; first != last; ++first)
-        {
-            if (keyName.startsWith(*first))
-                return true;
-        }
-    }
-    return false;
-}
-
-static char const * getTypeClass(RTTypeClass typeClass)
-{
-    switch (typeClass)
-    {
-        case RT_TYPE_INTERFACE:
-            return "INTERFACE";
-        case RT_TYPE_MODULE:
-            return "MODULE";
-        case RT_TYPE_STRUCT:
-            return "STRUCT";
-        case RT_TYPE_ENUM:
-            return "ENUM";
-        case RT_TYPE_EXCEPTION:
-            return "EXCEPTION";
-        case RT_TYPE_TYPEDEF:
-            return "TYPEDEF";
-        case RT_TYPE_SERVICE:
-            return "SERVICE";
-        case RT_TYPE_OBJECT:
-            return "OBJECT";
-        case RT_TYPE_CONSTANTS:
-            return "CONSTANTS";
-        default:
-            return "INVALID";
-    }
-}
-
-static OString getFieldAccess(RTFieldAccess fieldAccess)
-{
-    OString ret;
-    if ( (fieldAccess & RTFieldAccess::INVALID) == RTFieldAccess::INVALID )
-    {
-        ret += OString("INVALID");
-    }
-    if ( (fieldAccess & RTFieldAccess::READONLY) == RTFieldAccess::READONLY )
-    {
-        ret += OString(ret.isEmpty() ? "READONLY" : ",READONLY");
-    }
-    if ( (fieldAccess & RTFieldAccess::OPTIONAL) == RTFieldAccess::OPTIONAL )
-    {
-        ret += OString(ret.isEmpty() ? "OPTIONAL" : ",OPTIONAL");
-    }
-    if ( (fieldAccess & RTFieldAccess::MAYBEVOID) == RTFieldAccess::MAYBEVOID )
-    {
-        ret += OString(ret.isEmpty() ? "MAYBEVOID" : ",MAYBEVOID");
-    }
-    if ( (fieldAccess & RTFieldAccess::BOUND) == RTFieldAccess::BOUND )
-    {
-        ret += OString(ret.isEmpty() ? "BOUND" : ",BOUND");
-    }
-    if ( (fieldAccess & RTFieldAccess::CONSTRAINED) == RTFieldAccess::CONSTRAINED )
-    {
-        ret += OString(ret.isEmpty() ? "CONSTRAINED" : ",CONSTRAINED");
-    }
-    if ( (fieldAccess & RTFieldAccess::TRANSIENT) == RTFieldAccess::TRANSIENT )
-    {
-        ret += OString(ret.isEmpty() ? "TRANSIENT" : ",TRANSIENT");
-    }
-    if ( (fieldAccess & RTFieldAccess::MAYBEAMBIGUOUS) == RTFieldAccess::MAYBEAMBIGUOUS )
-    {
-        ret += OString(ret.isEmpty() ? "MAYBEAMBIGUOUS" : ",MAYBEAMBIGUOUS");
-    }
-    if ( (fieldAccess & RTFieldAccess::MAYBEDEFAULT) == RTFieldAccess::MAYBEDEFAULT )
-    {
-        ret += OString(ret.isEmpty() ? "MAYBEDEFAULT" : ",MAYBEDEFAULT");
-    }
-    if ( (fieldAccess & RTFieldAccess::REMOVABLE) == RTFieldAccess::REMOVABLE )
-    {
-        ret += OString(ret.isEmpty() ? "REMOVABLE" : ",REMOVABLE");
-    }
-    if ( (fieldAccess & RTFieldAccess::ATTRIBUTE) == RTFieldAccess::ATTRIBUTE )
-    {
-        ret += OString(ret.isEmpty() ? "ATTRIBUTE" : ",ATTRIBUTE");
-    }
-    if ( (fieldAccess & RTFieldAccess::PROPERTY) == RTFieldAccess::PROPERTY )
-    {
-        ret += OString(ret.isEmpty() ? "PROPERTY" : ",PROPERTY");
-    }
-    if ( (fieldAccess & RTFieldAccess::CONST) == RTFieldAccess::CONST )
-    {
-        ret += OString(ret.isEmpty() ? "CONST" : ",CONST");
-    }
-    if ( (fieldAccess & RTFieldAccess::READWRITE) == RTFieldAccess::READWRITE )
-    {
-        ret += OString(ret.isEmpty() ? "READWRITE" : ",READWRITE");
-    }
-    return ret;
-}
-
-static char const * getConstValueType(RTConstValue& constValue)
-{
-    switch (constValue.m_type)
-    {
-        case RT_TYPE_BOOL:
-            return "sal_Bool";
-        case RT_TYPE_BYTE:
-            return "sal_uInt8";
-        case RT_TYPE_INT16:
-            return "sal_Int16";
-        case RT_TYPE_UINT16:
-            return "sal_uInt16";
-        case RT_TYPE_INT32:
-            return "sal_Int32";
-        case RT_TYPE_UINT32:
-            return "sal_uInt32";
-//      case RT_TYPE_INT64:
-//          return "sal_Int64";
-//      case RT_TYPE_UINT64:
-//          return "sal_uInt64";
-        case RT_TYPE_FLOAT:
-            return "float";
-        case RT_TYPE_DOUBLE:
-            return "double";
-        case RT_TYPE_STRING:
-            return "sal_Unicode*";
-        default:
-            return "NONE";
-    }
-}
-
-static void printConstValue(RTConstValue& constValue)
-{
-    switch (constValue.m_type)
-    {
-        case RT_TYPE_NONE:
-            fprintf(stdout, "none");
-            break;
-        case RT_TYPE_BOOL:
-            fprintf(stdout, "%s", constValue.m_value.aBool ? "TRUE" : "FALSE");
-            break;
-        case RT_TYPE_BYTE:
-            fprintf(stdout, "%d", constValue.m_value.aByte);
-            break;
-        case RT_TYPE_INT16:
-            fprintf(stdout, "%d", constValue.m_value.aShort);
-            break;
-        case RT_TYPE_UINT16:
-            fprintf(stdout, "%d", constValue.m_value.aUShort);
-            break;
-        case RT_TYPE_INT32:
-            fprintf(
-                stdout, "%ld",
-                sal::static_int_cast< long >(constValue.m_value.aLong));
-            break;
-        case RT_TYPE_UINT32:
-            fprintf(
-                stdout, "%lu",
-                sal::static_int_cast< unsigned long >(
-                    constValue.m_value.aULong));
-            break;
-//      case RT_TYPE_INT64:
-//          fprintf(stdout, "%d", constValue.m_value.aHyper);
-//      case RT_TYPE_UINT64:
-//          fprintf(stdout, "%d", constValue.m_value.aUHyper);
-        case RT_TYPE_FLOAT:
-            fprintf(stdout, "%f", constValue.m_value.aFloat);
-            break;
-        case RT_TYPE_DOUBLE:
-            fprintf(stdout, "%f", constValue.m_value.aDouble);
-            break;
-        case RT_TYPE_STRING:
-            fprintf(
-                stdout, "%s",
-                (OUStringToOString(
-                    constValue.m_value.aString, RTL_TEXTENCODING_UTF8).
-                 getStr()));
-            break;
-        default:
-            break;
-    }
-}
-
-static void dumpTypeClass(bool & rbDump, RTTypeClass typeClass, OUString const & keyName)
-{
-    if (rbDump)
-        fprintf(stdout, "%s: %s\n", getTypeClass(typeClass), U2S(keyName));
-    rbDump = false;
-}
-
-static sal_uInt32 checkConstValue(Options_Impl const & options,
-                                  const OUString& keyName,
-                                  RTTypeClass typeClass,
-                                  bool & bDump,
-                                  RTConstValue& constValue1,
-                                  RTConstValue& constValue2,
-                                  sal_uInt16 index1)
-{
-    switch (constValue1.m_type)
-    {
-        case RT_TYPE_NONE:
-            break;
-        case RT_TYPE_BOOL:
-            if (constValue1.m_value.aBool != constValue2.m_value.aBool)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %s  !=  Value2 = %s\n", index1,
-                            constValue1.m_value.aBool ? "TRUE" : "FALSE",
-                            constValue2.m_value.aBool ? "TRUE" : "FALSE");
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_BYTE:
-            if (constValue1.m_value.aByte != constValue2.m_value.aByte)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %d  !=  Value2 = %d\n", index1,
-                            constValue1.m_value.aByte, constValue2.m_value.aByte);
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_INT16:
-            if (constValue1.m_value.aShort != constValue2.m_value.aShort)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %d  !=  Value2 = %d\n", index1,
-                            constValue1.m_value.aShort, constValue2.m_value.aShort);
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_UINT16:
-            if (constValue1.m_value.aUShort != constValue2.m_value.aUShort)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %d  !=  Value2 = %d\n", index1,
-                            constValue1.m_value.aUShort, constValue2.m_value.aUShort);
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_INT32:
-            if (constValue1.m_value.aLong != constValue2.m_value.aLong)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %ld  !=  Value2 = %ld\n", index1,
-                            sal::static_int_cast< long >(constValue1.m_value.aLong),
-                            sal::static_int_cast< long >(constValue2.m_value.aLong));
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_UINT32:
-            if (constValue1.m_value.aULong != constValue2.m_value.aULong)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %lu  !=  Value2 = %lu\n", index1,
-                            sal::static_int_cast< unsigned long >(constValue1.m_value.aULong),
-                            sal::static_int_cast< unsigned long >(constValue2.m_value.aULong));
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_INT64:
-            if (constValue1.m_value.aHyper != constValue2.m_value.aHyper)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(
-                        stdout, "  Field %d: Value1 = %s  !=  Value2 = %s\n",
-                        index1,
-                        OUStringToOString(
-                            OUString::number(constValue1.m_value.aHyper),
-                            RTL_TEXTENCODING_ASCII_US).getStr(),
-                        OUStringToOString(
-                            OUString::number(constValue2.m_value.aHyper),
-                            RTL_TEXTENCODING_ASCII_US).getStr());
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_UINT64:
-            if (constValue1.m_value.aUHyper != constValue2.m_value.aUHyper)
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(
-                        stdout, "  Field %d: Value1 = %s  !=  Value2 = %s\n",
-                        index1,
-                        OUStringToOString(
-                            OUString::number(
-                                constValue1.m_value.aUHyper),
-                            RTL_TEXTENCODING_ASCII_US).getStr(),
-                        OUStringToOString(
-                            OUString::number(
-                                constValue2.m_value.aUHyper),
-                            RTL_TEXTENCODING_ASCII_US).getStr());
-                        // printing the unsigned values as signed should be
-                        // acceptable...
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_FLOAT:
-            if (!rtl::math::approxEqual(constValue1.m_value.aFloat, constValue2.m_value.aFloat))
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %f  !=  Value2 = %f\n", index1,
-                            constValue1.m_value.aFloat, constValue2.m_value.aFloat);
-                }
-                return 1;
-            }
-            break;
-        case RT_TYPE_DOUBLE:
-            if (!rtl::math::approxEqual(constValue1.m_value.aDouble, constValue2.m_value.aDouble))
-            {
-                if ( options.forceOutput() && !options.unoTypeCheck() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "  Field %d: Value1 = %f  !=  Value2 = %f\n", index1,
-                            constValue1.m_value.aDouble, constValue2.m_value.aDouble);
-                }
-                return 1;
-            }
-            break;
-        default:
-            OSL_ASSERT(false);
-            break;
-    }
-    return 0;
-}
-
-enum verbosity_t {SILENT, REPORT};
-static sal_uInt32 checkField(Options_Impl const & options,
-                             const OUString& keyName,
-                             RTTypeClass typeClass,
-                             bool & bDump,
-                             typereg::Reader& reader1,
-                             typereg::Reader& reader2,
-                             sal_uInt16 index1,
-                             sal_uInt16 index2,
-                             verbosity_t const eVerbosity)
-{
-    sal_uInt32 nError = 0;
-    if ( reader1.getFieldName(index1) != reader2.getFieldName(index2) )
-    {
-        if (options.forceOutput() && (REPORT == eVerbosity))
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Field %d: Name1 = %s  !=  Name2 = %s\n", index1,
-                    U2S(reader1.getFieldName(index1)), U2S(reader2.getFieldName(index2)));
-        }
-        nError++;
-    }
-    if ( reader1.getFieldTypeName(index1) != reader2.getFieldTypeName(index2) )
-    {
-        if (options.forceOutput() && (REPORT == eVerbosity))
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Field %d: Type1 = %s  !=  Type2 = %s\n", index1,
-                    U2S(reader1.getFieldTypeName(index1)), U2S(reader2.getFieldTypeName(index2)));
-        }
-        nError++;
-    }
-    else
-    {
-        RTConstValue constValue1 = reader1.getFieldValue(index1);
-        RTConstValue constValue2 = reader2.getFieldValue(index2);
-        if ( constValue1.m_type != constValue2.m_type )
-        {
-            if (options.forceOutput() && (REPORT == eVerbosity))
-            {
-                dumpTypeClass (bDump, typeClass, keyName);
-                fprintf(stdout, "  Field %d: Access1 = %s  !=  Access2 = %s\n", index1,
-                        getConstValueType(constValue1), getConstValueType(constValue2));
-                fprintf(stdout, "  Field %d: Value1 = ", index1);
-                printConstValue(constValue1);
-                fprintf(stdout, "  !=  Value2 = ");
-                printConstValue(constValue1);
-                fprintf(stdout, "\n;");
-            }
-            nError++;
-        }
-        else
-        {
-            nError += checkConstValue(options, keyName, typeClass, bDump, constValue1, constValue2, index1);
-        }
-    }
-
-    if ( reader1.getFieldFlags(index1) != reader2.getFieldFlags(index2) )
-    {
-        if (options.forceOutput() && (REPORT == eVerbosity))
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Field %d: FieldAccess1 = %s  !=  FieldAccess2 = %s\n", index1,
-                    getFieldAccess(reader1.getFieldFlags(index1)).getStr(),
-                    getFieldAccess(reader1.getFieldFlags(index2)).getStr());
-        }
-        nError++;
-    }
-
-    if ( options.fullCheck() && (reader1.getFieldDocumentation(index1) != reader2.getFieldDocumentation(index2)) )
-    {
-        if (options.forceOutput() && (REPORT == eVerbosity))
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Field %d: Doku1 = %s\n             Doku2 = %s\n", index1,
-                    U2S(reader1.getFieldDocumentation(index1)), U2S(reader2.getFieldDocumentation(index2)));
-        }
-        nError++;
-    }
-    return nError;
-}
-
-static char const * getMethodMode(RTMethodMode methodMode)
-{
-    switch ( methodMode )
-    {
-        case RTMethodMode::ONEWAY:
-            return "ONEWAY";
-        case RTMethodMode::ONEWAY_CONST:
-            return "ONEWAY,CONST";
-        case RTMethodMode::TWOWAY:
-            return "NONE";
-        case RTMethodMode::TWOWAY_CONST:
-            return "CONST";
-        default:
-            return "INVALID";
-    }
-}
-
-static char const * getParamMode(RTParamMode paramMode)
-{
-    switch ( paramMode )
-    {
-        case RT_PARAM_IN:
-            return "IN";
-        case RT_PARAM_OUT:
-            return "OUT";
-        case RT_PARAM_INOUT:
-            return "INOUT";
-        default:
-            return "INVALID";
-    }
-}
-
-static sal_uInt32 checkMethod(Options_Impl const & options,
-                              const OUString& keyName,
-                              RTTypeClass typeClass,
-                              bool & bDump,
-                              typereg::Reader& reader1,
-                              typereg::Reader& reader2,
-                              sal_uInt16 index)
-{
-    sal_uInt32 nError = 0;
-    if ( reader1.getMethodName(index) != reader2.getMethodName(index) )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Method1 %d: Name1 = %s  !=  Name2 = %s\n", index,
-                    U2S(reader1.getMethodName(index)),
-                    U2S(reader2.getMethodName(index)));
-        }
-        nError++;
-    }
-
-    if ( reader1.getMethodReturnTypeName(index) != reader2.getMethodReturnTypeName(index) )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Method1 %d: ReturnType1 = %s  !=  ReturnType2 = %s\n", index,
-                    U2S(reader1.getMethodReturnTypeName(index)),
-                    U2S(reader2.getMethodReturnTypeName(index)));
-        }
-        nError++;
-    }
-
-    sal_uInt16 nParams1 = (sal_uInt16)reader1.getMethodParameterCount(index);
-    sal_uInt16 nParams2 = (sal_uInt16)reader2.getMethodParameterCount(index);
-    if ( nParams1 != nParams2 )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Method %d : nParameters1 = %d  !=  nParameters2 = %d\n", index, nParams1, nParams2);
-        }
-        nError++;
-    }
-    sal_uInt16 i=0;
-    for (i=0; i < nParams1 && i < nParams2; i++)
-    {
-        if ( reader1.getMethodParameterTypeName(index, i) != reader2.getMethodParameterTypeName(index, i) )
-        {
-            if ( options.forceOutput() )
-            {
-                dumpTypeClass (bDump, typeClass, keyName);
-                fprintf(stdout, "  Method %d, Parameter %d: Type1 = %s  !=  Type2 = %s\n", index, i,
-                        U2S(reader1.getMethodParameterTypeName(index, i)),
-                        U2S(reader2.getMethodParameterTypeName(index, i)));
-            }
-            nError++;
-        }
-        if ( options.fullCheck() && (reader1.getMethodParameterName(index, i) != reader2.getMethodParameterName(index, i)) )
-        {
-            if ( options.forceOutput() )
-            {
-                dumpTypeClass (bDump, typeClass, keyName);
-                fprintf(stdout, "  Method %d, Parameter %d: Name1 = %s  !=  Name2 = %s\n", index, i,
-                        U2S(reader1.getMethodParameterName(index, i)),
-                        U2S(reader2.getMethodParameterName(index, i)));
-            }
-            nError++;
-        }
-        if ( reader1.getMethodParameterFlags(index, i) != reader2.getMethodParameterFlags(index, i) )
-        {
-            if ( options.forceOutput() )
-            {
-                dumpTypeClass (bDump, typeClass, keyName);
-                fprintf(stdout, "  Method %d, Parameter %d: Mode1 = %s  !=  Mode2 = %s\n", index, i,
-                        getParamMode(reader1.getMethodParameterFlags(index, i)),
-                        getParamMode(reader2.getMethodParameterFlags(index, i)));
-            }
-            nError++;
-        }
-    }
-    if ( i < nParams1 && options.forceOutput() )
-    {
-        dumpTypeClass (bDump, typeClass, keyName);
-        fprintf(stdout, "  Registry1: Method %d contains %d more parameters\n", index, nParams1 - i);
-    }
-    if ( i < nParams2 && options.forceOutput() )
-    {
-        dumpTypeClass (bDump, typeClass, keyName);
-        fprintf(stdout, "  Registry2: Method %d contains %d more parameters\n", index, nParams2 - i);
-    }
-
-    sal_uInt16 nExcep1 = (sal_uInt16)reader1.getMethodExceptionCount(index);
-    sal_uInt16 nExcep2 = (sal_uInt16)reader2.getMethodExceptionCount(index);
-    if ( nExcep1 != nExcep2 )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  nExceptions1 = %d  !=  nExceptions2 = %d\n", nExcep1, nExcep2);
-        }
-        nError++;
-    }
-    for (i=0; i < nExcep1 && i < nExcep2; i++)
-    {
-        if ( reader1.getMethodExceptionTypeName(index, i) != reader2.getMethodExceptionTypeName(index, i) )
-        {
-            if ( options.forceOutput() )
-            {
-                dumpTypeClass (bDump, typeClass, keyName);
-                fprintf(stdout, "  Method %d, Exception %d: Name1 = %s  !=  Name2 = %s\n", index, i,
-                        U2S(reader1.getMethodExceptionTypeName(index, i)),
-                        U2S(reader2.getMethodExceptionTypeName(index, i)));
-            }
-            nError++;
-        }
-    }
-    if ( i < nExcep1 && options.forceOutput() )
-    {
-        dumpTypeClass (bDump, typeClass, keyName);
-        fprintf(stdout, "  Registry1: Method %d contains %d more exceptions\n", index, nExcep1 - i);
-    }
-    if ( i < nExcep2 && options.forceOutput() )
-    {
-        dumpTypeClass (bDump, typeClass, keyName);
-        fprintf(stdout, "  Registry2: Method %d contains %d more exceptions\n", index, nExcep2 - i);
-    }
-
-    if ( reader1.getMethodFlags(index) != reader2.getMethodFlags(index) )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Method %d: Mode1 = %s  !=  Mode2 = %s\n", index,
-                    getMethodMode(reader1.getMethodFlags(index)),
-                    getMethodMode(reader2.getMethodFlags(index)));
-        }
-        nError++;
-    }
-
-    if ( options.fullCheck() && (reader1.getMethodDocumentation(index) != reader2.getMethodDocumentation(index)) )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Method %d: Doku1 = %s\n              Doku2 = %s\n", index,
-                    U2S(reader1.getMethodDocumentation(index)),
-                    U2S(reader2.getMethodDocumentation(index)));
-        }
-        nError++;
-    }
-    return nError;
-}
-
-static char const * getReferenceType(RTReferenceType refType)
-{
-    switch (refType)
-    {
-        case RTReferenceType::SUPPORTS:
-            return "RTReferenceType::SUPPORTS";
-        case RTReferenceType::OBSERVES:
-            return "RTReferenceType::OBSERVES";
-        case RTReferenceType::EXPORTS:
-            return "RTReferenceType::EXPORTS";
-        case RTReferenceType::NEEDS:
-            return "RTReferenceType::NEEDS";
-        default:
-            return "RTReferenceType::INVALID";
-    }
-}
-
-static sal_uInt32 checkReference(Options_Impl const & options,
-                                 const OUString& keyName,
-                                 RTTypeClass typeClass,
-                                 bool & bDump,
-                                 typereg::Reader& reader1,
-                                    typereg::Reader& reader2,
-                                    sal_uInt16 index1,
-                                 sal_uInt16 index2)
-{
-    sal_uInt32 nError = 0;
-    if ( reader1.getReferenceTypeName(index1) != reader2.getReferenceTypeName(index2) )
-    {
-        if ( options.forceOutput() && !options.unoTypeCheck() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Reference %d: Name1 = %s  !=  Name2 = %s\n", index1,
-                    U2S(reader1.getReferenceTypeName(index1)),
-                    U2S(reader2.getReferenceTypeName(index2)));
-        }
-        nError++;
-    }
-    if ( reader1.getReferenceTypeName(index1) != reader2.getReferenceTypeName(index2) )
-    {
-        if ( options.forceOutput() && !options.unoTypeCheck() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Reference %d: Type1 = %s  !=  Type2 = %s\n", index1,
-                    getReferenceType(reader1.getReferenceSort(index1)),
-                    getReferenceType(reader2.getReferenceSort(index2)));
-        }
-        nError++;
-    }
-    if ( options.fullCheck() && (reader1.getReferenceDocumentation(index1) != reader2.getReferenceDocumentation(index2)) )
-    {
-        if ( options.forceOutput() && !options.unoTypeCheck() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Reference %d: Doku1 = %s\n                 Doku2 = %s\n", index1,
-                    U2S(reader1.getReferenceDocumentation(index1)),
-                    U2S(reader2.getReferenceDocumentation(index2)));
-        }
-        nError++;
-    }
-    if ( reader1.getReferenceFlags(index1) != reader2.getReferenceFlags(index2) )
-    {
-        if ( options.forceOutput() && !options.unoTypeCheck() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  Reference %d: Access1 = %s  !=  Access2 = %s\n", index1,
-                    getFieldAccess(reader1.getReferenceFlags(index1)).getStr(),
-                    getFieldAccess(reader1.getReferenceFlags(index2)).getStr());
-        }
-        nError++;
-    }
-    return nError;
-}
-
-static sal_uInt32 checkFieldsWithoutOrder(Options_Impl const & options,
-                                          const OUString& keyName,
-                                          RTTypeClass typeClass,
-                                          bool & bDump,
-                                          typereg::Reader& reader1,
-                                          typereg::Reader& reader2)
-{
-    sal_uInt32 nError = 0;
-
-    sal_uInt16 nFields1 = (sal_uInt16)reader1.getFieldCount();
-    sal_uInt16 nFields2 = (sal_uInt16)reader2.getFieldCount();
-    sal_uInt16 i=0, j=0;
-
-    if ( nFields1 > nFields2 )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass (bDump, typeClass, keyName);
-            fprintf(stdout, "  %s1 contains %d more properties as %s2\n",
-                    getTypeClass(typeClass), nFields1-nFields2, getTypeClass(typeClass));
-        }
-    }
-
-    bool bFound = false;
-    ::std::set< sal_uInt16 > moreProps;
-
-    for (i=0; i < nFields1; i++)
-    {
-        for (j=0; j < nFields2; j++)
-        {
-            if (!checkField(options, keyName, typeClass, bDump, reader1, reader2, i, j, SILENT))
-            {
-                bFound =  true;
-                moreProps.insert(j);
-                break;
-            }
-        }
-        if (!bFound)
-        {
-            if (options.forceOutput())
-            {
-                dumpTypeClass (bDump, typeClass, keyName);
-                fprintf(stdout, "  incompatible change: Field %d ('%s') of r1 is not longer a property of this %s in r2\n",
-                        i, U2S(shortName(reader1.getFieldName(i))), getTypeClass(typeClass));
-            }
-            nError++;
-        }
-        else
-        {
-            bFound = false;
-        }
-    }
-
-    if ( typeClass == RT_TYPE_SERVICE && !moreProps.empty() )
-    {
-        for (j=0; j < nFields2; j++)
-        {
-            if ( moreProps.find(j) == moreProps.end() )
-            {
-                if ( (reader2.getFieldFlags(j) & RTFieldAccess::OPTIONAL) != RTFieldAccess::OPTIONAL )
-                {
-                    if ( options.forceOutput() )
-                    {
-                        dumpTypeClass (bDump, typeClass, keyName);
-                        fprintf(stdout,
-                                "  incompatible change: Field %d ('%s') of r2 is a new property"
-                                " compared to this %s in r1 and is not 'optional'\n",
-                                j, U2S(shortName(reader2.getFieldName(j))), getTypeClass(typeClass));
-                    }
-                    nError++;
-                }
-            }
-        }
-    }
-
-    return nError;
-}
-
-static sal_uInt32 checkBlob(
-    Options_Impl const & options,
-    const OUString& keyName,
-    typereg::Reader& reader1, sal_uInt32 size1,
-    typereg::Reader& reader2, sal_uInt32 size2)
-{
-    sal_uInt32 nError = 0;
-    bool bDump = true;
-
-    if ( options.fullCheck() && (size1 != size2) )
-    {
-        if ( options.forceOutput() )
-        {
-            fprintf(
-                stdout, "    Size1 = %lu    Size2 = %lu\n",
-                sal::static_int_cast< unsigned long >(size1),
-                sal::static_int_cast< unsigned long >(size2));
-        }
-    }
-    if (reader1.isPublished())
-    {
-        if (!reader2.isPublished())
-        {
-            if (options.forceOutput())
-            {
-                dumpTypeClass(bDump, /*"?"*/ reader1.getTypeClass(), keyName);
-                fprintf(stdout, "    published in 1 but unpublished in 2\n");
-            }
-            ++nError;
-        }
-    }
-    else if (!options.checkUnpublished())
-    {
-        return nError;
-    }
-    if ( reader1.getTypeClass() != reader2.getTypeClass() )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass(bDump, /*"?"*/ reader1.getTypeClass(), keyName);
-            fprintf(stdout, "    TypeClass1 = %s  !=  TypeClass2 = %s\n",
-                    getTypeClass(reader1.getTypeClass()),
-                    getTypeClass(reader2.getTypeClass()));
-        }
-        return ++nError;
-    }
-
-    RTTypeClass typeClass = reader1.getTypeClass();
-    if ( reader1.getTypeName() != reader2.getTypeName() )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass(bDump, typeClass, keyName);
-            fprintf(stdout, "    TypeName1 = %s  !=  TypeName2 = %s\n",
-                    U2S(reader1.getTypeName()), U2S(reader2.getTypeName()));
-        }
-        nError++;
-    }
-    if ( (typeClass == RT_TYPE_INTERFACE ||
-          typeClass == RT_TYPE_STRUCT ||
-          typeClass == RT_TYPE_EXCEPTION) )
-    {
-        if (reader1.getSuperTypeCount() != reader2.getSuperTypeCount())
-        {
-            dumpTypeClass(bDump, typeClass, keyName);
-            fprintf(
-                stdout, "    SuperTypeCount1 = %d  !=  SuperTypeCount2 = %d\n",
-                static_cast< int >(reader1.getSuperTypeCount()),
-                static_cast< int >(reader2.getSuperTypeCount()));
-            ++nError;
-        } else
-        {
-            for (sal_Int16 i = 0; i < reader1.getSuperTypeCount(); ++i)
-            {
-                if (reader1.getSuperTypeName(i) != reader2.getSuperTypeName(i))
-                {
-                    if ( options.forceOutput() )
-                    {
-                        dumpTypeClass(bDump, typeClass, keyName);
-                        fprintf(stdout, "    SuperTypeName1 = %s  !=  SuperTypeName2 = %s\n",
-                                U2S(reader1.getSuperTypeName(i)), U2S(reader2.getSuperTypeName(i)));
-                    }
-                    nError++;
-                }
-            }
-        }
-    }
-
-    sal_uInt16 nFields1 = (sal_uInt16)reader1.getFieldCount();
-    sal_uInt16 nFields2 = (sal_uInt16)reader2.getFieldCount();
-    bool bCheckNormal = true;
-
-    if ( (typeClass == RT_TYPE_SERVICE ||
-          typeClass == RT_TYPE_MODULE ||
-          typeClass == RT_TYPE_CONSTANTS) && options.unoTypeCheck() )
-    {
-        bCheckNormal = false;
-    }
-
-    if ( bCheckNormal )
-    {
-        if ( nFields1 != nFields2 )
-        {
-            if ( options.forceOutput() )
-            {
-                dumpTypeClass(bDump, typeClass, keyName);
-                fprintf(stdout, "    nFields1 = %d  !=  nFields2 = %d\n", nFields1, nFields2);
-            }
-            nError++;
-        }
-
-        sal_uInt16 i;
-        for (i=0; i < nFields1 && i < nFields2; i++)
-        {
-            nError += checkField(options, keyName, typeClass, bDump, reader1, reader2, i, i, REPORT);
-        }
-        if ( i < nFields1 && options.forceOutput() )
-        {
-            dumpTypeClass(bDump, typeClass, keyName);
-            fprintf(stdout, "    Registry1 contains %d more fields\n", nFields1 - i);
-        }
-        if ( i < nFields2 && options.forceOutput() )
-        {
-            dumpTypeClass(bDump, typeClass, keyName);
-            fprintf(stdout, "    Registry2 contains %d more fields\n", nFields2 - i);
-        }
-    }
-    else
-    {
-        nError += checkFieldsWithoutOrder(options, keyName, typeClass, bDump, reader1, reader2);
-    }
-
-    if ( typeClass == RT_TYPE_INTERFACE )
-    {
-        sal_uInt16 nMethods1 = (sal_uInt16)reader1.getMethodCount();
-        sal_uInt16 nMethods2 = (sal_uInt16)reader2.getMethodCount();
-        if ( nMethods1 != nMethods2 )
-        {
-            if ( options.forceOutput() )
-            {
-                dumpTypeClass(bDump, typeClass, keyName);
-                fprintf(stdout, "    nMethods1 = %d  !=  nMethods2 = %d\n", nMethods1, nMethods2);
-            }
-            nError++;
-        }
-
-        sal_uInt16 i;
-        for (i=0; i < nMethods1 && i < nMethods2; i++)
-        {
-            nError += checkMethod(options, keyName, typeClass, bDump, reader1, reader2, i);
-        }
-        if ( i < nMethods1 && options.forceOutput() )
-        {
-            fprintf(stdout, "    Registry1 contains %d more methods\n", nMethods1 - i);
-        }
-        if ( i < nMethods2 && options.forceOutput() )
-        {
-            fprintf(stdout, "    Registry2 contains %d more methods\n", nMethods2 - i);
-        }
-    }
-    if ( typeClass == RT_TYPE_SERVICE )
-    {
-        sal_uInt16 nReference1 = (sal_uInt16)reader1.getReferenceCount();
-        sal_uInt16 nReference2 = (sal_uInt16)reader2.getReferenceCount();
-
-        if ( !bCheckNormal )
-        {
-            sal_uInt16 i=0, j=0;
-
-            if ( nReference1 > nReference2 )
-            {
-                if ( options.forceOutput() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "    service1 contains %d more references as service2\n",
-                            nReference1-nReference2);
-                }
-            }
-
-            bool bFound = false;
-            ::std::set< sal_uInt16 > moreReferences;
-
-            for (i=0; i < nReference1; i++)
-            {
-                for (j=0; j < nReference2; j++)
-                {
-                    if (!checkReference(options, keyName, typeClass, bDump, reader1, reader2, i, j))
-                    {
-                        bFound =  true;
-                        moreReferences.insert(j);
-                        break;
-                    }
-                }
-                if (!bFound)
-                {
-                    if (options.forceOutput())
-                    {
-                        dumpTypeClass(bDump, typeClass, keyName);
-                        fprintf(stdout,
-                                "  incompatible change: Reference %d ('%s') in 'r1' is not longer a reference"
-                                " of this service in 'r2'\n",
-                                i, U2S(shortName(reader1.getReferenceTypeName(i))));
-                    }
-                    nError++;
-                }
-                else
-                {
-                    bFound = false;
-                }
-            }
-
-            if ( !moreReferences.empty() )
-            {
-                for (j=0; j < nReference2; j++)
-                {
-                    if ( moreReferences.find(j) == moreReferences.end() )
-                    {
-                        if ( (reader2.getReferenceFlags(j) & RTFieldAccess::OPTIONAL) != RTFieldAccess::OPTIONAL )
-                        {
-                            if ( options.forceOutput() )
-                            {
-                                dumpTypeClass(bDump, typeClass, keyName);
-                                fprintf(stdout,
-                                        "  incompatible change: Reference %d ('%s') of r2 is a new reference"
-                                        " compared to this service in r1 and is not 'optional'\n",
-                                        j, U2S(shortName(reader2.getReferenceTypeName(j))));
-                            }
-                            nError++;
-                        }
-                    }
-                }
-            }
-        }
-        else
-        {
-            if ( nReference1 != nReference2 )
-            {
-                if ( options.forceOutput() )
-                {
-                    dumpTypeClass(bDump, typeClass, keyName);
-                    fprintf(stdout, "    nReferences1 = %d  !=  nReferences2 = %d\n", nReference1, nReference2);
-                }
-                nError++;
-            }
-
-            sal_uInt16 i;
-            for (i=0; i < nReference1 && i < nReference2; i++)
-            {
-                nError += checkReference(options, keyName, typeClass, bDump, reader1, reader2, i, i);
-            }
-            if ( i < nReference1 && options.forceOutput() )
-            {
-                fprintf(stdout, "    Registry1 contains %d more references\n", nReference1 - i);
-            }
-            if ( i < nReference2 && options.forceOutput() )
-            {
-                fprintf(stdout, "    Registry2 contains %d more references\n", nReference2 - i);
-            }
-        }
-    }
-
-    if ( options.fullCheck() && (reader1.getDocumentation() != reader2.getDocumentation()) )
-    {
-        if ( options.forceOutput() )
-        {
-            dumpTypeClass(bDump, typeClass, keyName);
-            fprintf(stdout, "    Doku1 = %s\n    Doku2 = %s\n",
-                    U2S(reader1.getDocumentation()), U2S(reader2.getDocumentation()));
-        }
-        nError++;
-    }
-    return nError;
-}
-
-static sal_uInt32 checkValueDifference(
-    Options_Impl const & options,
-    RegistryKey& key1, RegValueType valueType1, sal_uInt32 size1,
-    RegistryKey& key2, RegValueType valueType2, sal_uInt32 size2)
-{
-    OUString tmpName;
-    sal_uInt32 nError = 0;
-
-    if ( valueType1 == valueType2 )
-    {
-        bool bEqual = true;
-        switch (valueType1)
-        {
-        case RegValueType::LONGLIST:
-            {
-                RegistryValueList<sal_Int32> valueList1;
-                RegistryValueList<sal_Int32> valueList2;
-                key1.getLongListValue(tmpName, valueList1);
-                key2.getLongListValue(tmpName, valueList2);
-                sal_uInt32 length1 = valueList1.getLength();
-                sal_uInt32 length2 = valueList1.getLength();
-                if ( length1 != length2 )
-                {
-                    bEqual = false;
-                    break;
-                }
-                for (sal_uInt32 i=0; i<length1; i++)
-                {
-                    if ( valueList1.getElement(i) != valueList2.getElement(i) )
-                    {
-                        bEqual = false;
-                        break;
-                    }
-                }
-            }
-            break;
-        case RegValueType::STRINGLIST:
-            {
-                RegistryValueList<sal_Char*> valueList1;
-                RegistryValueList<sal_Char*> valueList2;
-                key1.getStringListValue(tmpName, valueList1);
-                key2.getStringListValue(tmpName, valueList2);
-                sal_uInt32 length1 = valueList1.getLength();
-                sal_uInt32 length2 = valueList1.getLength();
-                if ( length1 != length2 )
-                {
-                    bEqual = false;
-                    break;
-                }
-                for (sal_uInt32 i=0; i<length1; i++)
-                {
-                    if ( strcmp(valueList1.getElement(i), valueList2.getElement(i)) != 0 )
-                    {
-                        bEqual = false;
-                        break;
-                    }
-                }
-            }
-            break;
-        case RegValueType::UNICODELIST:
-            {
-                RegistryValueList<sal_Unicode*> valueList1;
-                RegistryValueList<sal_Unicode*> valueList2;
-                key1.getUnicodeListValue(tmpName, valueList1);
-                key2.getUnicodeListValue(tmpName, valueList2);
-                sal_uInt32 length1 = valueList1.getLength();
-                sal_uInt32 length2 = valueList1.getLength();
-                if ( length1 != length2 )
-                {
-                    bEqual = false;
-                    break;
-                }
-                for (sal_uInt32 i=0; i<length1; i++)
-                {
-                    if ( rtl_ustr_compare(valueList1.getElement(i), valueList2.getElement(i)) != 0 )
-                    {
-                        bEqual = false;
-                        break;
-                    }
-                }
-            }
-            break;
-        default:
-            break;
-        }
-
-        if ( bEqual)
-        {
-            std::vector< sal_uInt8 > value1(size1);
-            key1.getValue(tmpName, &value1[0]);
-
-            std::vector< sal_uInt8 > value2(size2);
-            key2.getValue(tmpName, &value2[0]);
-
-            bEqual = (memcmp(&value1[0], &value2[0], value1.size()) == 0 );
-            if ( !bEqual && valueType1 == RegValueType::BINARY && valueType2 == RegValueType::BINARY )
-            {
-                typereg::Reader reader1(&value1[0], value1.size(), false, TYPEREG_VERSION_1);
-                typereg::Reader reader2(&value2[0], value2.size(), false, TYPEREG_VERSION_1);
-                if ( reader1.isValid() && reader2.isValid() )
-                {
-                    return checkBlob(options, key1.getName(), reader1, size1, reader2, size2);
-                }
-            }
-            if ( bEqual )
-            {
-                return 0;
-            }
-            else
-            {
-                if ( options.forceOutput() )
-                {
-                    fprintf(stdout, "Difference: key values of key \"%s\" are different\n", U2S(key1.getName()));
-                }
-                nError++;
-            }
-        }
-    }
-
-    if ( options.forceOutput() )
-    {
-        switch (valueType1)
-        {
-        case RegValueType::NOT_DEFINED:
-            fprintf(stdout, "    Registry 1: key has no value\n");
-            break;
-        case RegValueType::LONG:
-            {
-                std::vector< sal_uInt8 > value1(size1);
-                key1.getValue(tmpName, &value1[0]);
-
-                fprintf(stdout, "    Registry 1: Value: Type = RegValueType::LONG\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size1));
-                fprintf(stdout, "                       Data = %p\n", &value1[0]);
-            }
-            break;
-        case RegValueType::STRING:
-            {
-                std::vector< sal_uInt8 > value1(size1);
-                key1.getValue(tmpName, &value1[0]);
-
-                fprintf(stdout, "    Registry 1: Value: Type = RegValueType::STRING\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size1));
-                fprintf(stdout, "                       Data = \"%s\"\n", reinterpret_cast<char const*>(&value1[0]));
-            }
-            break;
-        case RegValueType::UNICODE:
-            {
-                std::vector< sal_uInt8 > value1(size1);
-                key1.getValue(tmpName, &value1[0]);
-
-                OUString uStrValue(reinterpret_cast<sal_Unicode const*>(&value1[0]));
-                fprintf(stdout, "    Registry 1: Value: Type = RegValueType::UNICODE\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size1));
-                fprintf(stdout, "                       Data = \"%s\"\n", U2S(uStrValue));
-            }
-            break;
-        case RegValueType::BINARY:
-            fprintf(stdout, "    Registry 1: Value: Type = RegValueType::BINARY\n");
-            break;
-        case RegValueType::LONGLIST:
-            {
-                RegistryValueList<sal_Int32> valueList;
-                key1.getLongListValue(tmpName, valueList);
-                fprintf(stdout, "    Registry 1: Value: Type = RegValueType::LONGLIST\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size1));
-                sal_uInt32 length = valueList.getLength();
-                for (sal_uInt32 i=0; i<length; i++)
-                {
-                    fprintf(
-                        stdout, "                       Data[%lu] = %ld\n",
-                        sal::static_int_cast< unsigned long >(i),
-                        sal::static_int_cast< long >(valueList.getElement(i)));
-                }
-            }
-            break;
-        case RegValueType::STRINGLIST:
-            {
-                RegistryValueList<sal_Char*> valueList;
-                key1.getStringListValue(tmpName, valueList);
-                fprintf(stdout, "    Registry 1: Value: Type = RegValueType::STRINGLIST\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size1));
-                sal_uInt32 length = valueList.getLength();
-                for (sal_uInt32 i=0; i<length; i++)
-                {
-                    fprintf(
-                        stdout, "                       Data[%lu] = \"%s\"\n",
-                        sal::static_int_cast< unsigned long >(i),
-                        valueList.getElement(i));
-                }
-            }
-            break;
-        case RegValueType::UNICODELIST:
-            {
-                RegistryValueList<sal_Unicode*> valueList;
-                key1.getUnicodeListValue(tmpName, valueList);
-                fprintf(stdout, "    Registry 1: Value: Type = RegValueType::UNICODELIST\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size1));
-                sal_uInt32 length = valueList.getLength();
-                OUString uStrValue;
-                for (sal_uInt32 i=0; i<length; i++)
-                {
-                    uStrValue = OUString(valueList.getElement(i));
-                    fprintf(
-                        stdout, "                       Data[%lu] = \"%s\"\n",
-                        sal::static_int_cast< unsigned long >(i), U2S(uStrValue));
-                }
-            }
-            break;
-        }
-
-        switch (valueType2)
-        {
-        case RegValueType::NOT_DEFINED:
-            fprintf(stdout, "    Registry 2: key has no value\n");
-            break;
-        case RegValueType::LONG:
-            {
-                std::vector< sal_uInt8 > value2(size2);
-                key2.getValue(tmpName, &value2[0]);
-
-                fprintf(stdout, "    Registry 2: Value: Type = RegValueType::LONG\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size2));
-                fprintf(stdout, "                       Data = %p\n", &value2[0]);
-            }
-            break;
-        case RegValueType::STRING:
-            {
-                std::vector< sal_uInt8 > value2(size2);
-                key2.getValue(tmpName, &value2[0]);
-
-                fprintf(stdout, "    Registry 2: Value: Type = RegValueType::STRING\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size2));
-                fprintf(stdout, "                       Data = \"%s\"\n", reinterpret_cast<char const*>(&value2[0]));
-            }
-            break;
-        case RegValueType::UNICODE:
-            {
-                std::vector< sal_uInt8 > value2(size2);
-                key2.getValue(tmpName, &value2[0]);
-
-                OUString uStrValue(reinterpret_cast<sal_Unicode const*>(&value2[0]));
-                fprintf(stdout, "    Registry 2: Value: Type = RegValueType::UNICODE\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size2));
-                fprintf(stdout, "                       Data = \"%s\"\n", U2S(uStrValue));
-            }
-            break;
-        case RegValueType::BINARY:
-            fprintf(stdout, "    Registry 2: Value: Type = RegValueType::BINARY\n");
-            break;
-        case RegValueType::LONGLIST:
-            {
-                RegistryValueList<sal_Int32> valueList;
-                key2.getLongListValue(tmpName, valueList);
-                fprintf(stdout, "    Registry 2: Value: Type = RegValueType::LONGLIST\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size2));
-                sal_uInt32 length = valueList.getLength();
-                for (sal_uInt32 i=0; i<length; i++)
-                {
-                    fprintf(
-                        stdout, "                       Data[%lu] = %ld\n",
-                        sal::static_int_cast< unsigned long >(i),
-                        sal::static_int_cast< long >(valueList.getElement(i)));
-                }
-            }
-            break;
-        case RegValueType::STRINGLIST:
-            {
-                RegistryValueList<sal_Char*> valueList;
-                key2.getStringListValue(tmpName, valueList);
-                fprintf(stdout, "    Registry 2: Value: Type = RegValueType::STRINGLIST\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size2));
-                sal_uInt32 length = valueList.getLength();
-                for (sal_uInt32 i=0; i<length; i++)
-                {
-                    fprintf(
-                        stdout, "                       Data[%lu] = \"%s\"\n",
-                        sal::static_int_cast< unsigned long >(i),
-                        valueList.getElement(i));
-                }
-            }
-            break;
-        case RegValueType::UNICODELIST:
-            {
-                RegistryValueList<sal_Unicode*> valueList;
-                key2.getUnicodeListValue(tmpName, valueList);
-                fprintf(stdout, "    Registry 2: Value: Type = RegValueType::UNICODELIST\n");
-                fprintf(
-                    stdout, "                       Size = %lu\n",
-                    sal::static_int_cast< unsigned long >(size2));
-                sal_uInt32 length = valueList.getLength();
-                OUString uStrValue;
-                for (sal_uInt32 i=0; i<length; i++)
-                {
-                    uStrValue = OUString(valueList.getElement(i));
-                    fprintf(
-                        stdout, "                       Data[%lu] = \"%s\"\n",
-                        sal::static_int_cast< unsigned long >(i), U2S(uStrValue));
-                }
-            }
-            break;
-        }
-    }
-    return nError;
-}
-
-static bool hasPublishedChildren(Options_Impl const & options, RegistryKey & key)
-{
-    RegistryKeyNames subKeyNames;
-    key.getKeyNames(OUString(), subKeyNames);
-    for (sal_uInt32 i = 0; i < subKeyNames.getLength(); ++i)
-    {
-        OUString keyName(subKeyNames.getElement(i));
-        if (!options.matchedWithExcludeKey(keyName))
-        {
-            keyName = keyName.copy(keyName.lastIndexOf('/') + 1);
-            RegistryKey subKey;
-            if (key.openKey(keyName, subKey) == RegError::NO_ERROR)
-            {
-                if (options.forceOutput())
-                {
-                    fprintf(
-                        stdout,
-                        ("WARNING: could not open key \"%s\" in registry"
-                         " \"%s\"\n"),
-                        U2S(subKeyNames.getElement(i)),
-                        options.getRegName1().c_str());
-                }
-            }
-            if (subKey.isValid())
-            {
-                RegValueType type;
-                sal_uInt32 size;
-                if (subKey.getValueInfo(OUString(), &type, &size) != RegError::NO_ERROR)
-                {
-                    if (options.forceOutput())
-                    {
-                        fprintf(
-                            stdout,
-                            ("WARNING: could not read key \"%s\" in registry"
-                             " \"%s\"\n"),
-                            U2S(subKeyNames.getElement(i)),
-                            options.getRegName1().c_str());
-                    }
-                }
-                else if (type == RegValueType::BINARY)
-                {
-                    bool published = false;
-                    std::vector< sal_uInt8 > value(size);
-                    if (subKey.getValue(OUString(), &value[0]) != RegError::NO_ERROR)
-                    {
-                        if (options.forceOutput())
-                        {
-                            fprintf(
-                                stdout,
-                                ("WARNING: could not read key \"%s\" in"
-                                 " registry \"%s\"\n"),
-                                U2S(subKeyNames.getElement(i)),
-                                options.getRegName1().c_str());
-                        }
-                    }
-                    else
-                    {
-                        published = typereg::Reader(&value[0], value.size(), false, TYPEREG_VERSION_1).isPublished();
-                    }
-                    if (published)
-                    {
-                        return true;
-                    }
-                }
-            }
-        }
-    }
-    return false;
-}
-
-static sal_uInt32 checkDifferences(
-    Options_Impl const & options,
-    RegistryKey& key, StringSet& keys,
-    RegistryKeyNames& subKeyNames1,
-    RegistryKeyNames& subKeyNames2)
-{
-    sal_uInt32 nError = 0;
-    sal_uInt32 length1 = subKeyNames1.getLength();
-    sal_uInt32 length2 = subKeyNames2.getLength();
-    sal_uInt32 i,j;
-
-    for (i=0; i<length1; i++)
-    {
-        bool bFound = false;
-        for (j=0; j<length2; j++)
-        {
-            if ( subKeyNames1.getElement(i) == subKeyNames2.getElement(j) )
-            {
-                bFound = true;
-                keys.insert(subKeyNames1.getElement(i));
-                break;
-            }
-        }
-        if ( !bFound )
-        {
-            if ( options.fullCheck() )
-            {
-                if ( options.forceOutput() )
-                {
-                    fprintf(stdout, "EXISTENCE: key \"%s\" exists only in registry \"%s\"\n",
-                            U2S(subKeyNames1.getElement(i)), options.getRegName1().c_str());
-                }
-                nError++;
-            }
-            else
-            {
-                OUString keyName(subKeyNames1.getElement(i));
-                if (!options.matchedWithExcludeKey(keyName))
-                {
-                    keyName = keyName.copy(keyName.lastIndexOf('/') + 1);
-                    RegistryKey subKey;
-                    if (key.openKey(keyName, subKey) != RegError::NO_ERROR)
-                    {
-                        if (options.forceOutput())
-                        {
-                            fprintf(
-                                stdout,
-                                ("ERROR: could not open key \"%s\" in registry"
-                                 " \"%s\"\n"),
-                                U2S(subKeyNames1.getElement(i)),
-                                options.getRegName1().c_str());
-                        }
-                        ++nError;
-                    }
-                    if (subKey.isValid())
-                    {
-                        RegValueType type;
-                        sal_uInt32 size;
-                        if (subKey.getValueInfo(OUString(), &type, &size) != RegError::NO_ERROR)
-                        {
-                            if (options.forceOutput())
-                            {
-                                fprintf(
-                                    stdout,
-                                    ("ERROR: could not read key \"%s\" in"
-                                     " registry \"%s\"\n"),
-                                    U2S(subKeyNames1.getElement(i)),
-                                    options.getRegName1().c_str());
-                            }
-                            ++nError;
-                        }
-                        else if (type == RegValueType::BINARY)
-                        {
-                            std::vector< sal_uInt8 > value(size);
-                            if (subKey.getValue(OUString(), &value[0]) != RegError::NO_ERROR)
-                            {
-                                if (options.forceOutput())
-                                {
-                                    fprintf(
-                                        stdout,
-                                        ("ERROR: could not read key \"%s\" in"
-                                         " registry \"%s\"\n"),
-                                        U2S(subKeyNames1.getElement(i)),
-                                        options.getRegName1().c_str());
-                                }
-                                ++nError;
-                            }
-                            else
-                            {
-                                typereg::Reader reader(&value[0], value.size(), false, TYPEREG_VERSION_1);
-                                if (reader.getTypeClass() == RT_TYPE_MODULE)
-                                {
-                                    if (options.checkUnpublished() || hasPublishedChildren(options, subKey))
-                                    {
-                                        if (options.forceOutput())
-                                        {
-                                            fprintf(
-                                                stdout,
-                                                ("EXISTENCE: module \"%s\""
-                                                 " %sexists only in registry"
-                                                 " 1\n"),
-                                                U2S(subKeyNames1.getElement(i)),
-                                                (options.checkUnpublished()
-                                                 ? ""
-                                                 : "with published children "));
-                                        }
-                                        ++nError;
-                                    }
-                                }
-                                else if (options.checkUnpublished() || reader.isPublished())
-                                {
-                                    if (options.forceOutput())
-                                    {
-                                        fprintf(
-                                            stdout,
-                                            ("EXISTENCE: %spublished key \"%s\""
-                                             " exists only in registry 1\n"),
-                                            reader.isPublished() ? "" : "un",
-                                            U2S(subKeyNames1.getElement(i)));
-                                    }
-                                    ++nError;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    for (i=0; i<length2; i++)
-    {
-        bool bFound = false;
-        for (j=0; j<length1; j++)
-        {
-            if ( subKeyNames2.getElement(i) == subKeyNames1.getElement(j) )
-            {
-                bFound = true;
-                keys.insert(subKeyNames2.getElement(i));
-                break;
-            }
-        }
-        if ( !bFound && options.fullCheck() )
-        {
-            if ( options.forceOutput() )
-            {
-                fprintf(stdout, "EXISTENCE: key \"%s\" exists only in registry \"%s\"\n",
-                        U2S(subKeyNames2.getElement(i)), options.getRegName2().c_str());
-            }
-            nError++;
-        }
-    }
-    return nError;
-}
-
-static sal_uInt32 compareKeys(
-    Options_Impl const & options,
-    RegistryKey& key1,
-    RegistryKey& key2)
-{
-    sal_uInt32 nError = 0;
-
-    RegValueType valueType1 = RegValueType::NOT_DEFINED;
-    RegValueType valueType2 = RegValueType::NOT_DEFINED;
-    sal_uInt32 size1 = 0;
-    sal_uInt32 size2 = 0;
-
-    OUString tmpName;
-    RegError e1 = key1.getValueInfo(tmpName, &valueType1, &size1);
-    RegError e2 = key2.getValueInfo(tmpName, &valueType2, &size2);
-    if ( (e1 == e2) && (e1 != RegError::VALUE_NOT_EXISTS) && (e1 != RegError::INVALID_VALUE) )
-    {
-        nError += checkValueDifference(options, key1, valueType1, size1, key2, valueType2, size2);
-    }
-    else
-    {
-        if ( (e1 != RegError::INVALID_VALUE) || (e2 != RegError::INVALID_VALUE) )
-        {
-            if ( options.forceOutput() )
-            {
-                fprintf(stdout, "VALUES: key values of key \"%s\" are different\n", U2S(key1.getName()));
-            }
-            nError++;
-        }
-    }
-
-    RegistryKeyNames subKeyNames1;
-    RegistryKeyNames subKeyNames2;
-
-    key1.getKeyNames(tmpName, subKeyNames1);
-    key2.getKeyNames(tmpName, subKeyNames2);
-
-    StringSet keys;
-    nError += checkDifferences(options, key1, keys, subKeyNames1, subKeyNames2);
-
-    StringSet::iterator iter = keys.begin();
-    StringSet::iterator end = keys.end();
-
-    while ( iter !=  end )
-    {
-        OUString keyName(*iter);
-        if ( options.matchedWithExcludeKey(keyName) )
-        {
-            ++iter;
-            continue;
-        }
-
-        sal_Int32 nPos = keyName.lastIndexOf( '/' );
-        keyName = keyName.copy( nPos != -1 ? nPos+1 : 0 );
-
-        RegistryKey subKey1;
-        if ( key1.openKey(keyName, subKey1) != RegError::NO_ERROR )
-        {
-            if ( options.forceOutput() )
-            {
-                fprintf(stdout, "ERROR: could not open key \"%s\" in registry \"%s\"\n",
-                        U2S(*iter), options.getRegName1().c_str());
-            }
-            nError++;
-        }
-
-        RegistryKey subKey2;
-        if ( key2.openKey(keyName, subKey2) != RegError::NO_ERROR )
-        {
-            if ( options.forceOutput() )
-            {
-                fprintf(stdout, "ERROR: could not open key \"%s\" in registry \"%s\"\n",
-                        U2S(*iter), options.getRegName2().c_str());
-            }
-            nError++;
-        }
-
-        if ( subKey1.isValid() && subKey2.isValid() )
-        {
-            nError += compareKeys(options, subKey1, subKey2);
-        }
-        ++iter;
-    }
-
-    return nError;
-}
-
-#if (defined UNX) || defined __MINGW32__
-int main( int argc, char * argv[] )
-#else
-int _cdecl main( int argc, char * argv[] )
-#endif
-{
-    try
-    {
-        std::vector< std::string > args;
-
-        Options_Impl options(argv[0]);
-        for (int i = 1; i < argc; i++)
-        {
-            if (!Options::checkArgument(args, argv[i], strlen(argv[i])))
-            {
-                // failure.
-                options.printUsage();
-                return 1;
-            }
-        }
-        if (!options.initOptions(args))
-        {
-            return 1;
-        }
-
-        OUString regName1( convertToFileUrl(options.getRegName1().c_str(), options.getRegName1().size()) );
-        OUString regName2( convertToFileUrl(options.getRegName2().c_str(), options.getRegName2().size()) );
-
-        Registry reg1, reg2;
-        if ( reg1.open(regName1, RegAccessMode::READONLY) != RegError::NO_ERROR )
-        {
-            fprintf(stdout, "%s: open registry \"%s\" failed\n",
-                    options.getProgramName().c_str(), options.getRegName1().c_str());
-            return 2;
-        }
-        if ( reg2.open(regName2, RegAccessMode::READONLY) != RegError::NO_ERROR )
-        {
-            fprintf(stdout, "%s: open registry \"%s\" failed\n",
-                    options.getProgramName().c_str(), options.getRegName2().c_str());
-            return 3;
-        }
-
-        RegistryKey key1, key2;
-        if ( reg1.openRootKey(key1) != RegError::NO_ERROR )
-        {

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list