[Libreoffice-commits] core.git: 2 commits - config_host/config_version.h.in unoidl/README unoidl/source

Stephan Bergmann sbergman at redhat.com
Wed May 8 08:31:14 PDT 2013


 config_host/config_version.h.in  |    8 ++---
 unoidl/README                    |   54 +++++++++++++++++++++++++++++++++------
 unoidl/source/reg2unoidl.cxx     |    9 +++++-
 unoidl/source/unoidlprovider.cxx |    5 ++-
 4 files changed, 61 insertions(+), 15 deletions(-)

New commits:
commit 1ad700f5a449aeee1dfbbb5ae37b3bf43638d394
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed May 8 17:29:37 2013 +0200

    Minor improvements to UNOIDL binary format
    
    Change-Id: Ia215b34842ce85bfbd1ad90a286abcbae0884bd5

diff --git a/config_host/config_version.h.in b/config_host/config_version.h.in
index 0d78882..cc9cd98 100644
--- a/config_host/config_version.h.in
+++ b/config_host/config_version.h.in
@@ -16,10 +16,10 @@ Version settings
 #undef LIBO_THIS_YEAR
 
 #define LIBO_VERSION_DOTTED \
-    (LIBO_VERSION_STRINGIFY(LIBO_VERSION_MAJOR) "." \
-     LIBO_VERSION_STRINGIFY(LIBO_VERSION_MINOR) "." \
-     LIBO_VERSION_STRINGIFY(LIBO_VERSION_MICRO) "." \
-     LIBO_VERSION_STRINGIFY(LIBO_VERSION_PATCH))
+    LIBO_VERSION_STRINGIFY(LIBO_VERSION_MAJOR) "." \
+    LIBO_VERSION_STRINGIFY(LIBO_VERSION_MINOR) "." \
+    LIBO_VERSION_STRINGIFY(LIBO_VERSION_MICRO) "." \
+    LIBO_VERSION_STRINGIFY(LIBO_VERSION_PATCH)
 
 #define LIBO_VERSION_ENCODED_IN_32BITS \
     ((LIBO_VERSION_MAJOR << 24) | (LIBO_VERSION_MINOR << 16) | (LIBO_VERSION_MICRO << 8) | LIBO_VERSION_PATCH)
diff --git a/unoidl/README b/unoidl/README
index 2e159c6..5daff7a 100644
--- a/unoidl/README
+++ b/unoidl/README
@@ -45,11 +45,18 @@ The file starts with an 8 byte header, followed by information about the root
 map (reg2unoidl generates files in a single depth-first pass, so the root map
 itself is at the end of the file):
 
-* 8 byte header "UNOIDL\0\xFF"
+* 7 byte magic header "UNOIDL\xFF"
+* version byte 0
 * Offset of root Map
 * UInt32 number of entries of root Map
 ...
 
+Files generated by reg2unoidl follow that by a
+
+  "\0** Created by LibreOffice " LIBO_VERSION_DOTTED " reg2unoidl **\0"
+
+banner (cf. config_host/config_version.h.in), as a debugging aid.
+
 Layout of per-entry payload in the root or a module Map:
 
 * kind byte:
diff --git a/unoidl/source/reg2unoidl.cxx b/unoidl/source/reg2unoidl.cxx
index a311147..2bd9e56 100644
--- a/unoidl/source/reg2unoidl.cxx
+++ b/unoidl/source/reg2unoidl.cxx
@@ -17,11 +17,13 @@
 #include <utility>
 #include <vector>
 
+#include "config_version.h"
 #include "osl/endian.h"
 #include "osl/file.h"
 #include "osl/file.hxx"
 #include "osl/process.h"
 #include "rtl/process.h"
+#include "rtl/string.h"
 #include "rtl/string.hxx"
 #include "rtl/textenc.h"
 #include "rtl/textcvt.h"
@@ -746,9 +748,14 @@ SAL_IMPLEMENT_MAIN() {
             << +e << std::endl;
         std::exit(EXIT_FAILURE);
     }
-    write(f, "UNOIDL\0\xFF", 8);
+    write(f, "UNOIDL\xFF\0", 8);
     write32(f, 0); // root map offset
     write32(f, 0); // root map size
+    write(
+        f,
+        RTL_CONSTASCII_STRINGPARAM(
+            "\0** Created by LibreOffice " LIBO_VERSION_DOTTED
+            " reg2unoidl **\0"));
     sal_uInt64 off;
     std::size_t size;
     try {
diff --git a/unoidl/source/unoidlprovider.cxx b/unoidl/source/unoidlprovider.cxx
index 6ead9cf..33848a1 100644
--- a/unoidl/source/unoidlprovider.cxx
+++ b/unoidl/source/unoidlprovider.cxx
@@ -1058,11 +1058,12 @@ rtl::Reference< Entity > readEntity(
 UnoidlProvider::UnoidlProvider(OUString const & uri):
     file_(new detail::MappedFile(uri))
 {
-    if (file_->size < 8 || std::memcmp(file_->address, "UNOIDL\0\xFF", 8) != 0)
+    if (file_->size < 8 || std::memcmp(file_->address, "UNOIDL\xFF\0", 8) != 0)
     {
         throw FileFormatException(
             file_->uri,
-            "UNOIDL format: does not begin with magic UNOIDL\\0\\xFF");
+            "UNOIDL format: does not begin with magic UNOIDL\\xFF and version"
+            " 0");
     }
     sal_uInt32 off = file_->read32(8);
     mapSize_ = file_->read32(12);
commit 79774d961644ea81b4e790114c9b785d38bcd8a4
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed May 8 16:20:12 2013 +0200

    unoidl/README improvements
    
    Change-Id: I5123d984f8f9bf49f5d1ad8e8decebfaaa6e7769

diff --git a/unoidl/README b/unoidl/README
index ed9ee25..2e159c6 100644
--- a/unoidl/README
+++ b/unoidl/README
@@ -21,7 +21,13 @@ format).
 
 == Specification of the new UNOIDL types.rdb format ==
 
-Uses the following definitions:
+The format uses byte-oriented, platform-independent, binary files.  Larger
+quantities are stored LSB first, without alignment requirements.  Offsets are
+32 bit, effectively limiting the overall file size to 4GB, but that is not
+considered a limitation in practice (and avoids unnecessary bloat compared to
+64 bit offsets).
+
+The following definitions are used throughout:
 
 * UInt16: 2-byte value, LSB first
 * UInt32: 4-byte value, LSB first
@@ -35,24 +41,37 @@ Uses the following definitions:
 * Entry: Offset of NUL-Name followed by Offset of payload
 * Map: zero or more Entries
 
+The file starts with an 8 byte header, followed by information about the root
+map (reg2unoidl generates files in a single depth-first pass, so the root map
+itself is at the end of the file):
+
+* 8 byte header "UNOIDL\0\xFF"
+* Offset of root Map
+* UInt32 number of entries of root Map
+...
+
 Layout of per-entry payload in the root or a module Map:
 
 * kind byte:
+
 ** 0: module
 *** followed by:
 **** UInt32 number N1 of entries of Map
 **** N1 * Entry
+
 ** otherwise:
 *** 0x80 bit: 1 if published
 *** 0x40 bit: 1 if deprecated
 *** 0x20 bit: flag (may only be 1 for certain kinds, see below)
 *** remaining bits:
+
 **** 1: enum type
 ***** followed by:
 ****** UInt32 number N1 of members
 ****** N1 * tuple of:
 ******* Offset of Idx-Name
 ******* UInt32
+
 **** 2: plain struct type (with base if flag is 1)
 ***** followed by:
 ****** if "with base": Offset of Idx-Name
@@ -60,6 +79,7 @@ Layout of per-entry payload in the root or a module Map:
 ****** N1 * tuple of:
 ******* Offset of Idx-Name name
 ******* Offset of Idx-Name type
+
 **** 3: polymorphic struct type template
 ***** followed by:
 ****** UInt32 number N1 of type parameters
@@ -69,6 +89,7 @@ Layout of per-entry payload in the root or a module Map:
 ******* kind byte: 0x01 bit is 1 if parameterized type
 ******* Offset of Idx-Name name
 ******* Offset of Idx-Name type
+
 **** 4: exception type (with base if flag is 1)
 ***** followed by:
 ****** if "with base": Offset of Idx-Name
@@ -76,6 +97,7 @@ Layout of per-entry payload in the root or a module Map:
 ****** N1 * tuple of:
 ******* Offset of Idx-Name name
 ******* Offset of Idx-Name type
+
 **** 5: interface type
 ***** followed by:
 ****** UInt32 number N1 of direct mandatory bases
@@ -104,13 +126,16 @@ Layout of per-entry payload in the root or a module Map:
 ******** Offset of Idx-Name type
 ******* UInt32 number N8 of exceptions
 ******* N8 * Offset of Idx-Name
+
 **** 6: typedef
 ***** followed by:
 ****** Offset of Idx-Name
+
 **** 7: constant group
 ***** followed by:
 ****** UInt32 number N1 of entries of Map
 ****** N1 * Entry
+
 **** 8: single-interface--based service (with default constructor if flag is 1)
 ***** followed by:
 ****** Offset of Idx-Name
@@ -125,6 +150,7 @@ Layout of per-entry payload in the root or a module Map:
 ********* Offset of Idx-Name type
 ******** UInt32 number N3 of exceptions
 ******** N3 * Offset of Idx-Name
+
 **** 9: accumulation-based service
 ***** followed by:
 ****** UInt32 number N1 of direct mandatory base services
@@ -149,9 +175,11 @@ Layout of per-entry payload in the root or a module Map:
 ******** 0x0001 bit: 1 if maybevoid
 ******* Offset of Idx-Name name
 ******* Offset of Idx-Name type
+
 **** 10: interface-based singleton
 ***** followed by:
 ****** Offset of Idx-Name
+
 **** 11: service-based singleton
 ***** followed by:
 ****** Offset of Idx-Name
@@ -161,32 +189,35 @@ Layout of per-entry payload in a constant group Map:
 * kind byte:
 ** 0x80 bit: 1 if deprecated
 ** remaining bits:
+
 *** 0: BOOLEAN
 **** followed by value byte, 0 represents false, 1 represents true
+
 *** 1: BYTE
 **** followed by value byte, representing values with two's complement
+
 *** 2: SHORT
 **** followed by UInt16 value, representing values with two's complement
+
 *** 3: UNSIGNED SHORT
 **** followed by UInt16 value
+
 *** 4: LONG
 **** followed by UInt32 value, representing values with two's complement
+
 *** 5: UNSIGNED LONG
 **** followed by UInt32 value
+
 *** 6: HYPER
 **** followed by UInt64 value, representing values with two's complement
+
 *** 7: UNSIGNED HYPER
 **** followed by UInt64 value
+
 *** 8: FLOAT
 **** followed by 4-byte value, representing values in ISO 60599 binary32 format,
       LSB first
+
 *** 9: DOUBLE
 **** followed by 8-byte value, representing values in ISO 60599 binary64 format,
       LSB first
-
-Memory layout:
-
-* 8 byte header "UNOIDL\0\xFF
-* Offset of root Map
-* UInt32 number of entries of root Map
-...


More information about the Libreoffice-commits mailing list