[ooo-build-commit] patches/dev300 patches/test
Thorsten Behrens
thorsten at kemper.freedesktop.org
Mon Oct 19 14:03:47 PDT 2009
patches/dev300/apply | 21
patches/dev300/speed-store-lck.diff | 94
patches/dev300/speed-store.diff | 33
patches/dev300/store-core.diff | 4118 ----------------------------------
patches/dev300/store-crash-fix.diff | 24
patches/dev300/store-install.diff | 103
patches/dev300/store-registry.diff | 174 -
patches/test/store-v2-fileformat.diff | 5
8 files changed, 31 insertions(+), 4541 deletions(-)
New commits:
commit 2297885ed31b1f0547a6d7d3360dc4f2c184c198
Author: Thorsten Behrens <thb at openoffice.org>
Date: Mon Oct 19 21:51:05 2009 +0200
Fix for the store (aka 'rdb files') problems
* patches/dev300/apply: binned old store patches, added
only new crash fix patch
* patches/dev300/speed-store-lck.diff: rm-ed
* patches/dev300/speed-store.diff: rm-ed
* patches/dev300/store-core.diff: rm-ed
* patches/dev300/store-crash-fix.diff: simple and safe fix for
missing page magics, originating from old regcomp binaries
* patches/dev300/store-install.diff: rm-ed
* patches/dev300/store-registry.diff: rm-ed
* patches/test/store-v2-fileformat.diff: added some helpful
comments for the poor chap having to resuscitate this
diff --git a/patches/dev300/apply b/patches/dev300/apply
index 677a0cb..ff71f10 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -14,7 +14,7 @@ Common : PreprocessPatches, BuildBits, TemporaryHacks, FixesNotForUpstream, \
Fixes, DefaultSettings, Features, VCL, Misc, HelpContent, \
Icons, Branding, CalcFixes, WriterFixes, EasterEgg, \
GStreamer, CWSBackports, WPG, Cleanups, WMF, GnomeVFS, WebDAV, \
- Layout, VBABits, VBAObjects, CalcErrors, Store, CJK, GCJ, Lwp, WPS, \
+ Layout, VBABits, VBAObjects, CalcErrors, CJK, GCJ, Lwp, WPS, \
OOXML, OOXMLExport, SVGImport, FrameworkFeature, UnitTesting, \
PopupRemoval, LinkWarningDlg, InternalCairo, \
FedoraCommonFixes, InternalMesaHeaders, LayoutDialogs, Fuzz, \
@@ -2413,24 +2413,6 @@ gstreamer-sd.diff, i#68717, rodo
# hyperlink issue with numeric slide names in Impress
sd-update-relative-links.diff, n#355674, i#55224, rodo
-[ Store ]
-SectionOwner => rodo
-SectionIssue => i#75399
-
-# FIXME: 2009-08-12: Does not apply at all. --tml
-# store-core.diff
-
-# FIXME: 2009-08-27: Depend on store-core.diff. --tml
-# store-install.diff
-# store-registry.diff
-
-# don't burn 3% of startup doing CRC's we don't need
-speed-store.diff, i#78495, michael
-
-# don't do a load of locking we don't need to 1% of startup
-# FIXME: 2009-08-12: Does not apply at all. --tml
-# speed-store-lck.diff, i#78526, michael
-
[ WMF ]
wmf-pattern-brush.diff, n#232232, rodo
@@ -3413,3 +3395,4 @@ sw-no-macro-recorder-in-ui.diff, fridrich
[ Fixes ]
xmlhelp-build-without-java.diff, rodo
filter-fix-build-FCFGMerge.cfg.diff, rodo
+store-crash-fix.diff, thorsten
diff --git a/patches/dev300/speed-store-lck.diff b/patches/dev300/speed-store-lck.diff
deleted file mode 100644
index ffaa955..0000000
--- a/patches/dev300/speed-store-lck.diff
+++ /dev/null
@@ -1,94 +0,0 @@
-diff -u -r ../HEAD/build/src680-m211/store/source/filelckb.cxx store/source/filelckb.cxx
---- store/source/filelckb.cxx 2007-06-11 11:57:42.000000000 +0100
-+++ store/source/filelckb.cxx 2007-06-15 11:43:34.000000000 +0100
-@@ -332,6 +332,8 @@
- */
- bool isValid (void) const { return (m_hFile != 0); }
-
-+ bool isWriteable() { return m_bWriteable; }
-+
- /** Operation.
- */
- storeError close (void);
-@@ -630,9 +632,16 @@
- rnDone = 0;
-
- // Acquire exclusive access.
-- osl::MutexGuard aGuard (m_aMutex);
- if (m_pImpl->isValid())
-- return m_pImpl->readAt (nOffset, pBuffer, nBytes, rnDone);
-+ {
-+ bool bLock = m_pImpl->isWriteable();
-+ if (bLock)
-+ m_aMutex.acquire();
-+ storeError nErr = m_pImpl->readAt (nOffset, pBuffer, nBytes, rnDone);
-+ if (bLock)
-+ m_aMutex.release();
-+ return nErr;
-+ }
- else
- return store_E_InvalidHandle;
- }
-Only in store/source: filelckb.cxx~
-diff -u -r store/source/storbase.cxx store/source/storbase.cxx
---- store/source/storbase.cxx 2007-06-11 11:57:42.000000000 +0100
-+++ store/source/storbase.cxx 2007-06-15 12:17:13.000000000 +0100
-@@ -1754,13 +1754,14 @@
- */
- storeError OStorePageBIOS::load (OStorePageObject& rPage)
- {
-- // Acquire exclusive access.
-- osl::MutexGuard aGuard (m_aMutex);
--
- // Check precond.
- if (!m_xLockBytes.is())
- return store_E_InvalidAccess;
-
-+ bool bLock = m_bWriteable;
-+ if (bLock) // Acquire exclusive access.
-+ m_aMutex.acquire();
-+
- // Save PageDescriptor.
- OStorePageData &rData = rPage.getData();
- OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-@@ -1771,7 +1772,7 @@
- {
- // Restore PageDescriptor.
- rData.PageHeader ().m_aDescr = aDescr;
-- return eErrCode;
-+ goto err;
- }
-
- // Verify page.
-@@ -1780,7 +1781,7 @@
- {
- // Restore PageDescriptor.
- rData.PageHeader ().m_aDescr = aDescr;
-- return eErrCode;
-+ goto err;
- }
-
- #ifdef OSL_BIGENDIAN
-@@ -1791,13 +1792,20 @@
- // Verify PageDescriptor.
- if (!((aDescr == rData.PageHeader ().m_aDescr) ||
- (aDescr <= rData.PageHeader ().m_aDescr) ))
-- return store_E_InvalidAccess;
-+ {
-+ eErrCode = store_E_InvalidAccess;
-+ goto err;
-+ }
-
- // Mark page as clean.
- rPage.clean();
-
- // Done.
-- return store_E_None;
-+ eErrCode = store_E_None;
-+ err:
-+ if (bLock) // Release exclusive access.
-+ m_aMutex.release();
-+ return eErrCode;
- }
-
- /*
diff --git a/patches/dev300/speed-store.diff b/patches/dev300/speed-store.diff
deleted file mode 100644
index 3a2ffc4..0000000
--- a/patches/dev300/speed-store.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-diff -u -r ../HEAD/build/src680-m211/store/source/storbase.hxx store/source/storbase.hxx
---- store/source/storbase.hxx
-+++ store/source/storbase.hxx
-@@ -883,6 +883,7 @@
- */
- storeError verify ()
- {
-+ return store_E_None;
- sal_uInt32 nCRC32 = 0;
- nCRC32 = G::crc32 (nCRC32, &PageHeader ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
- nCRC32 = G::crc32 (nCRC32, &PageHeader ().m_aDescr, size() - sizeof(G));
-diff -u -r ../HEAD/build/src680-m211/store/source/stordata.hxx store/source/stordata.hxx
---- store/source/stordata.hxx
-+++ store/source/stordata.hxx
-@@ -246,6 +246,7 @@
- */
- storeError verify (const D& rDescr)
- {
-+ return store_E_None;
- sal_uInt32 nCRC32 = 0;
- nCRC32 = G::crc32 (nCRC32, &DataRepresentation ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
- nCRC32 = G::crc32 (nCRC32, DataRepresentation ().m_pData, capacity(rDescr));
---- store/source/stortree.cxx
-+++ store/source/stortree.cxx
-@@ -253,6 +253,8 @@
- */
- storeError OStoreBTreeNodeObject::verify (const D& rDescr)
- {
-+ return store_E_None;
-+
- return PageHolderObject< page >::verify (m_xPage, nAddr);
- }
-
diff --git a/patches/dev300/store-core.diff b/patches/dev300/store-core.diff
deleted file mode 100644
index 534467d..0000000
--- a/patches/dev300/store-core.diff
+++ /dev/null
@@ -1,4118 +0,0 @@
---- store/inc/store/store.h.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/inc/store/store.h 2009-04-06 16:42:11.000000000 +0000
-@@ -95,7 +95,8 @@ storeError SAL_CALL store_openFile (
- rtl_uString *pFilename,
- storeAccessMode eAccessMode,
- sal_uInt16 nPageSize,
-- storeFileHandle *phFile
-+ storeFileHandle *phFile,
-+ sal_uInt16 nFormatVersion = STORE_FORMAT_V1
- ) SAL_THROW_EXTERN_C();
-
-
---- store/inc/store/store.hxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/inc/store/store.hxx 2009-04-06 16:42:11.000000000 +0000
-@@ -281,7 +281,8 @@ public:
- inline storeError create (
- const rtl::OUString &rFilename,
- storeAccessMode eAccessMode,
-- sal_uInt16 nPageSize = STORE_DEFAULT_PAGESIZE
-+ sal_uInt16 nPageSize = STORE_DEFAULT_PAGESIZE,
-+ sal_uInt16 nFormatVersion = STORE_FORMAT_V1
- ) SAL_THROW(());
-
- /** Open the temporary file in memory.
---- store/inc/store/store.inl.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/inc/store/store.inl 2009-04-06 16:42:11.000000000 +0000
-@@ -321,14 +321,15 @@ inline sal_Bool OStoreFile::isValid (voi
- inline storeError OStoreFile::create (
- const rtl::OUString &rFilename,
- storeAccessMode eAccessMode,
-- sal_uInt16 nPageSize) SAL_THROW(())
-+ sal_uInt16 nPageSize,
-+ sal_uInt16 nFormatVersion) SAL_THROW(())
- {
- if (m_hImpl)
- {
- store_releaseHandle (m_hImpl);
- m_hImpl = 0;
- }
-- return store_openFile (rFilename.pData, eAccessMode, nPageSize, &m_hImpl);
-+ return store_openFile (rFilename.pData, eAccessMode, nPageSize, &m_hImpl, nFormatVersion);
- }
-
- inline storeError OStoreFile::createInMemory (
---- store/inc/store/types.h.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/inc/store/types.h 2009-04-06 16:42:11.000000000 +0000
-@@ -38,16 +38,26 @@
- extern "C" {
- #endif
-
-+/* format version
-+ V1 original rdb format, used publicly
-+ V2 internal rdb format, which might change during time and
-+ should be only used internally for services.rdb, types.rdb
-+ and other rdb files shipped with OOo
-+*/
-+
-+#define STORE_FORMAT_V1 1
-+#define STORE_FORMAT_V2 2
-+
- /** PageSize (recommended) default.
- @see store_openFile()
- */
--#define STORE_DEFAULT_PAGESIZE ((sal_uInt16)0x0400)
--
-+#define STORE_DEFAULT_PAGESIZE ((sal_uInt16)0x200)
-
- /** PageSize (enforced) limits.
- @see store_openFile()
- */
--#define STORE_MINIMUM_PAGESIZE ((sal_uInt16)0x0200)
-+#define STORE_MINIMUM_PAGESIZE_V1 ((sal_uInt16)0x200)
-+#define STORE_MINIMUM_PAGESIZE_V2 ((sal_uInt16)0x80)
- #define STORE_MAXIMUM_PAGESIZE ((sal_uInt16)0x8000)
-
-
---- store/source/filelckb.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/filelckb.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -623,7 +623,11 @@ storeError OFileLockBytes::writeAt (
- // Acquire exclusive access.
- osl::MutexGuard aGuard (m_aMutex);
- if (m_pImpl->isValid())
-- return m_pImpl->writeAt (nOffset, pBuffer, nBytes, rnDone);
-+ {
-+ storeError nErr;
-+ nErr = m_pImpl->writeAt (nOffset, pBuffer, nBytes, rnDone);
-+ return nErr;
-+ }
- else
- return store_E_InvalidHandle;
- }
---- store/source/storbase.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/storbase.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -43,6 +43,7 @@
- #include <sal/types.h>
- #include <rtl/alloc.h>
- #include <rtl/ref.hxx>
-+#include <rtl/memory.h>
- #include <osl/diagnose.h>
- #include <osl/endian.h>
- #include <osl/mutex.hxx>
-@@ -51,6 +52,12 @@
- #include <store/lockbyte.hxx>
- #include <storbase.hxx>
-
-+#ifdef WNT
-+#include <malloc.h>
-+#else
-+#include <alloca.h>
-+#endif
-+
- using namespace store;
-
- /*========================================================================
-@@ -222,7 +229,9 @@ storeError OStorePageObject::verify (con
- * OStoreSuperBlock.
- *
- *======================================================================*/
--#define STORE_MAGIC_SUPERBLOCK sal_uInt32(0x484D5343)
-+#define STORE_MAGIC_SUPERBLOCK_V1 sal_uInt32(0x484D5343)
-+#define STORE_MAGIC_SUPERBLOCK_V2 sal_uInt32(0x484D5344)
-+#define STORE_VERSION 2
-
- struct OStoreSuperBlock
- {
-@@ -250,7 +259,7 @@ struct OStoreSuperBlock
- /** Construction.
- */
- OStoreSuperBlock (void)
-- : m_aGuard (STORE_MAGIC_SUPERBLOCK),
-+ : m_aGuard (STORE_MAGIC_SUPERBLOCK_V2),
- m_nMarked (0),
- m_aMarked (0),
- m_nUnused (0),
-@@ -286,14 +295,21 @@ struct OStoreSuperBlock
- (m_nMarked == rOther.m_nMarked) &&
- (m_aMarked == rOther.m_aMarked) &&
- (m_nUnused == rOther.m_nUnused) &&
-- (m_aUnused == rOther.m_aUnused) );
-+ (m_aUnused == rOther.m_aUnused) );
- }
-
- /** create.
- */
-- void create (const D& rDescr)
-+ void create (const D& rDescr, sal_uInt16 nFormatVersion)
- {
-- m_aGuard = G(STORE_MAGIC_SUPERBLOCK);
-+ switch (nFormatVersion) {
-+ case STORE_FORMAT_V1:
-+ m_aGuard = G(STORE_MAGIC_SUPERBLOCK_V1);
-+ break;
-+ case STORE_FORMAT_V2:
-+ m_aGuard = G(STORE_MAGIC_SUPERBLOCK_V2);
-+ break;
-+ }
- m_aDescr = rDescr;
-
- m_nMarked = 0;
-@@ -360,13 +376,14 @@ struct OStoreSuperBlock
-
- /** verify (external representation).
- */
-- storeError verify (void)
-+ storeError verify (sal_uInt32 nVersion)
- {
- sal_uInt32 nMagic = m_aGuard.m_nMagic;
- #ifdef OSL_BIGENDIAN
- nMagic = OSL_SWAPDWORD(nMagic);
- #endif /* OSL_BIGENDIAN */
-- if (nMagic != STORE_MAGIC_SUPERBLOCK)
-+ if ((nVersion == STORE_FORMAT_V1 && nMagic != STORE_MAGIC_SUPERBLOCK_V1) ||
-+ (nVersion == STORE_FORMAT_V2 && nMagic != STORE_MAGIC_SUPERBLOCK_V2))
- return store_E_WrongFormat;
-
- sal_uInt32 nCRC32 = 0;
-@@ -380,6 +397,26 @@ struct OStoreSuperBlock
- else
- return store_E_None;
- }
-+
-+ /** return version of superblock, determined by magic number in guard
-+ */
-+ sal_uInt32 version ()
-+ {
-+ sal_uInt32 nVersion;
-+
-+ switch (m_aGuard.m_nMagic) {
-+ case STORE_MAGIC_SUPERBLOCK_V1:
-+ nVersion = STORE_FORMAT_V1;
-+ break;
-+ case STORE_MAGIC_SUPERBLOCK_V2:
-+ nVersion = STORE_FORMAT_V2;
-+ break;
-+ default:
-+ nVersion = 0;
-+ }
-+
-+ return nVersion;
-+ }
- };
-
- /*========================================================================
-@@ -471,6 +508,10 @@ struct OStoreSuperBlockPage
- SuperBlock m_aSuperTwo;
- StateBlock m_aState;
-
-+ /** version
-+ */
-+ sal_uInt32 m_nVersion;
-+
- /** size.
- */
- static sal_uInt16 size (void)
-@@ -492,7 +533,7 @@ struct OStoreSuperBlockPage
-
- /** Construction.
- */
-- OStoreSuperBlockPage (void)
-+ OStoreSuperBlockPage (sal_uInt16 nFormatVersion) : m_nVersion (nFormatVersion)
- {}
-
- /** swap (internal and external representation).
-@@ -518,6 +559,8 @@ struct OStoreSuperBlockPage
- swap();
- #endif /* OSL_BIGENDIAN */
-
-+ m_nVersion = m_aSuperOne.version ();
-+
- // Done.
- return eErrCode;
- }
-@@ -603,7 +646,7 @@ storeError OStoreSuperBlockPage::create
- if (eErrCode == store_E_None)
- {
- // Setup 1st and 2nd SuperBlock copy.
-- m_aSuperOne.create (rDescr);
-+ m_aSuperOne.create (rDescr, m_nVersion);
- m_aSuperTwo = m_aSuperOne;
-
- // Mark as modified.
-@@ -729,11 +772,11 @@ storeError OStoreSuperBlockPage::verify
- #endif /* OSL_BIGENDIAN */
-
- // Verify 1st copy.
-- storeError eErrCode = m_aSuperOne.verify();
-+ storeError eErrCode = m_aSuperOne.verify (m_nVersion);
- if (eErrCode == store_E_None)
- {
- // Ok. Verify 2nd copy.
-- eErrCode = m_aSuperTwo.verify();
-+ eErrCode = m_aSuperTwo.verify (m_nVersion);
- if (eErrCode == store_E_None)
- {
- // Ok. Ensure identical copies (1st copy wins).
-@@ -764,7 +807,7 @@ storeError OStoreSuperBlockPage::verify
- else
- {
- // Failure. Verify 2nd copy.
-- eErrCode = m_aSuperTwo.verify();
-+ eErrCode = m_aSuperTwo.verify (m_nVersion);
- if (eErrCode == store_E_None)
- {
- // Ok. Replace 1st copy with 2nd copy.
-@@ -979,7 +1022,7 @@ storeError OStorePageBIOS::verify (Super
- if (rpSuper == 0)
- {
- // Allocate.
-- if ((rpSuper = new SuperPage()) == 0)
-+ if ((rpSuper = new SuperPage(version ())) == 0)
- return store_E_OutOfMemory;
-
- // Load (w/o verification).
-@@ -1090,7 +1133,7 @@ storeError OStorePageBIOS::initialize (
- * create (SuperBlock).
- * Precond: initialized, writeable (store_AccessCreate).
- */
--storeError OStorePageBIOS::create (sal_uInt16 nPageSize)
-+storeError OStorePageBIOS::create (sal_uInt16 nPageSize, sal_uInt16 nFormatVersion)
- {
- // Acquire exclusive access.
- osl::MutexGuard aGuard (m_aMutex);
-@@ -1103,7 +1146,14 @@ storeError OStorePageBIOS::create (sal_u
-
- // Check PageSize.
- sal_uInt16 nMinSize = SuperPage::size();
-- nMinSize = std::max (nMinSize, STORE_MINIMUM_PAGESIZE);
-+ switch (nFormatVersion) {
-+ case STORE_FORMAT_V1:
-+ nMinSize = std::max (nMinSize, STORE_MINIMUM_PAGESIZE_V1);
-+ break;
-+ case STORE_FORMAT_V2:
-+ nMinSize = std::max (nMinSize, STORE_MINIMUM_PAGESIZE_V2);
-+ break;
-+ }
-
- nPageSize = std::max (nPageSize, nMinSize);
- nPageSize = std::min (nPageSize, STORE_MAXIMUM_PAGESIZE);
-@@ -1118,7 +1168,7 @@ storeError OStorePageBIOS::create (sal_u
- return eErrCode;
-
- // Check SuperBlock page allocation.
-- if ((m_pSuper == 0) && ((m_pSuper = new SuperPage()) == 0))
-+ if ((m_pSuper == 0) && ((m_pSuper = new SuperPage(nFormatVersion)) == 0))
- {
- // Cleanup and fail.
- releaseLock (0, SuperPage::size());
-@@ -1465,7 +1515,12 @@ storeError OStorePageBIOS::allocate (
- if (aListHead.m_nAddr)
- {
- // Allocate from FreeList.
-- OStorePageData aPageHead (OStorePageData::size());
-+#ifdef WNT
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) _alloca (OStorePageData::size());
-+#else
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) alloca (OStorePageData::size());
-+#endif
-+ OStorePageData aPageHead (OStorePageData::size(), sizeof (OStorePageData), aPageHeadData);
- aPageHead.location (aListHead.m_nAddr);
-
- // Load PageHead.
-@@ -1478,9 +1533,9 @@ storeError OStorePageBIOS::allocate (
-
- // Verify FreeList head.
- OSL_PRECOND(
-- aPageHead.m_aUnused.m_nAddr != STORE_PAGE_NULL,
-+ aPageHead.PageHeader ().m_aUnused.m_nAddr != STORE_PAGE_NULL,
- "OStorePageBIOS::allocate(): page not free");
-- if (aPageHead.m_aUnused.m_nAddr == STORE_PAGE_NULL)
-+ if (aPageHead.PageHeader ().m_aUnused.m_nAddr == STORE_PAGE_NULL)
- {
- // Recovery: Reset FreeList.
- m_pSuper->m_aSuperTwo.unusedReset();
-@@ -1501,11 +1556,11 @@ storeError OStorePageBIOS::allocate (
-
- // Assign location.
- OStorePageData &rData = rPage.getData();
-- rData.location (aPageHead.m_aDescr.m_nAddr);
-+ rData.location (aPageHead.PageHeader ().m_aDescr.m_nAddr);
-
- // Pop from FreeList.
-- aListHead.m_nAddr = aPageHead.m_aUnused.m_nAddr;
-- rData.m_aUnused.m_nAddr = STORE_PAGE_NULL;
-+ aListHead.m_nAddr = aPageHead.PageHeader ().m_aUnused.m_nAddr;
-+ rData.PageHeader ().m_aUnused.m_nAddr = STORE_PAGE_NULL;
-
- // Save page.
- eErrCode = poke (rPage);
-@@ -1639,8 +1694,8 @@ storeError OStorePageBIOS::free (OStoreP
- // Push onto FreeList.
- OStorePageLink aListHead (m_pSuper->m_aSuperTwo.unusedHead());
-
-- rData.m_aUnused.m_nAddr = aListHead.m_nAddr;
-- aListHead.m_nAddr = rData.m_aDescr.m_nAddr;
-+ rData.PageHeader ().m_aUnused.m_nAddr = aListHead.m_nAddr;
-+ aListHead.m_nAddr = rData.PageHeader ().m_aDescr.m_nAddr;
-
- // Save PageHead.
- eErrCode = poke (rData);
-@@ -1678,14 +1733,14 @@ storeError OStorePageBIOS::load (OStoreP
-
- // Save PageDescriptor.
- OStorePageData &rData = rPage.getData();
-- OStorePageDescriptor aDescr (rData.m_aDescr);
-+ OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-
- // Read page.
-- storeError eErrCode = read (aDescr.m_nAddr, &rData, aDescr.m_nSize);
-+ storeError eErrCode = read (aDescr.m_nAddr, rData.Data (), aDescr.m_nSize);
- if (eErrCode != store_E_None)
- {
- // Restore PageDescriptor.
-- rData.m_aDescr = aDescr;
-+ rData.PageHeader ().m_aDescr = aDescr;
- return eErrCode;
- }
-
-@@ -1694,7 +1749,7 @@ storeError OStorePageBIOS::load (OStoreP
- if (eErrCode != store_E_None)
- {
- // Restore PageDescriptor.
-- rData.m_aDescr = aDescr;
-+ rData.PageHeader ().m_aDescr = aDescr;
- return eErrCode;
- }
-
-@@ -1704,8 +1759,8 @@ storeError OStorePageBIOS::load (OStoreP
- #endif /* OSL_BIGENDIAN */
-
- // Verify PageDescriptor.
-- if (!((aDescr == rData.m_aDescr) ||
-- (aDescr <= rData.m_aDescr) ))
-+ if (!((aDescr == rData.PageHeader ().m_aDescr) ||
-+ (aDescr <= rData.PageHeader ().m_aDescr) ))
- return store_E_InvalidAccess;
-
- // Mark page as clean.
-@@ -1898,7 +1953,12 @@ storeError OStorePageBIOS::scanNext (
- return store_E_InvalidAccess;
-
- // Setup PageHead.
-- OStorePageData aPageHead (OStorePageData::size());
-+#ifdef WNT
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) _alloca (OStorePageData::size());
-+#else
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) alloca (OStorePageData::size());
-+#endif
-+ OStorePageData aPageHead (OStorePageData::size(), sizeof (OStorePageData), aPageHeadData);
-
- // Check context.
- while (rCtx.isValid())
-@@ -1913,11 +1973,11 @@ storeError OStorePageBIOS::scanNext (
- continue;
-
- // Check PageHead Magic number.
-- if (aPageHead.m_aGuard.m_nMagic != rCtx.m_nMagic)
-+ if (aPageHead.PageHeader ().m_aGuard.m_nMagic != rCtx.m_nMagic)
- continue;
-
- // Check PageHead Unused link.
-- if (aPageHead.m_aUnused.m_nAddr != STORE_PAGE_NULL)
-+ if (aPageHead.PageHeader ().m_aUnused.m_nAddr != STORE_PAGE_NULL)
- continue;
-
- // Load page.
-@@ -1941,14 +2001,14 @@ storeError OStorePageBIOS::scanNext (
- storeError OStorePageBIOS::peek (OStorePageData &rData)
- {
- // Save PageDescriptor.
-- OStorePageDescriptor aDescr (rData.m_aDescr);
-+ OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-
- // Read PageHead.
-- storeError eErrCode = read (aDescr.m_nAddr, &rData, rData.size());
-+ storeError eErrCode = read (aDescr.m_nAddr, rData.Data (), rData.size());
- if (eErrCode != store_E_None)
- {
- // Restore PageDescriptor.
-- rData.m_aDescr = aDescr;
-+ rData.PageHeader ().m_aDescr = aDescr;
- return eErrCode;
- }
-
-@@ -1957,7 +2017,7 @@ storeError OStorePageBIOS::peek (OStoreP
- if (eErrCode != store_E_None)
- {
- // Restore PageDescriptor.
-- rData.m_aDescr = aDescr;
-+ rData.PageHeader ().m_aDescr = aDescr;
- return eErrCode;
- }
-
-@@ -1967,8 +2027,8 @@ storeError OStorePageBIOS::peek (OStoreP
- #endif /* OSL_BIGENDIAN */
-
- // Verify PageDescriptor.
-- if (!((aDescr == rData.m_aDescr) ||
-- (aDescr <= rData.m_aDescr) ))
-+ if (!((aDescr == rData.PageHeader ().m_aDescr) ||
-+ (aDescr <= rData.PageHeader ().m_aDescr) ))
- return store_E_InvalidAccess;
- else
- return store_E_None;
-@@ -1981,7 +2041,7 @@ storeError OStorePageBIOS::peek (OStoreP
- storeError OStorePageBIOS::poke (OStorePageData &rData)
- {
- // Save PageDescriptor.
-- OStorePageDescriptor aDescr (rData.m_aDescr);
-+ OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-
- #ifdef OSL_BIGENDIAN
- // Swap to external representation.
-@@ -1992,7 +2052,7 @@ storeError OStorePageBIOS::poke (OStoreP
- rData.guard ();
-
- // Write PageHead.
-- storeError eErrCode = write (aDescr.m_nAddr, &rData, rData.size());
-+ storeError eErrCode = write (aDescr.m_nAddr, rData.Data (), rData.size());
-
- #ifdef OSL_BIGENDIAN
- // Swap back to internal representation.
-@@ -2011,7 +2071,7 @@ storeError OStorePageBIOS::poke (OStoreP
- {
- // Save PageDescriptor.
- OStorePageData &rData = rPage.getData();
-- OStorePageDescriptor aDescr (rData.m_aDescr);
-+ OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-
- #ifdef OSL_BIGENDIAN
- // Swap to external representation.
-@@ -2022,7 +2082,7 @@ storeError OStorePageBIOS::poke (OStoreP
- rPage.guard (aDescr);
-
- // Write page.
-- storeError eErrCode = write (aDescr.m_nAddr, &rData, aDescr.m_nSize);
-+ storeError eErrCode = write (aDescr.m_nAddr, rData.Data (), aDescr.m_nSize);
-
- #ifdef OSL_BIGENDIAN
- // Swap back to internal representation.
-@@ -2037,3 +2097,183 @@ storeError OStorePageBIOS::poke (OStoreP
- return eErrCode;
- }
-
-+sal_uInt32 OStorePageBIOS::version ()
-+{
-+ if (!m_pSuper)
-+ return 0;
-+
-+ return m_pSuper->m_nVersion;
-+}
-+
-+static void
-+copyAndTerminate( sal_Char *pDest, const sal_Char *pSrc, sal_Int32 nBytes)
-+{
-+ rtl_copyMemory (pDest, pSrc, nBytes);
-+ pDest[nBytes] = '\0';
-+}
-+
-+#define STORE_MAGIC_LONGNAME sal_uInt32 (0x12345678)
-+
-+struct OStorePageLongNameData : public OStorePageData
-+{
-+ typedef OStorePageData base;
-+
-+ struct Representation {
-+ sal_Char m_nData[1];
-+ };
-+ public:
-+ OStorePageLongNameData(sal_uInt16 nPageSize, sal_uInt8 *pData) :
-+ OStorePageData (nPageSize, sizeof (OStorePageLongNameData), pData)
-+ {
-+ base::PageHeader ().m_aGuard.m_nMagic = STORE_MAGIC_LONGNAME;
-+ base::PageHeader ().m_aDescr.m_nUsed = sal::static_int_cast< sal_uInt16 >(
-+ base::PageHeader ().m_aDescr.m_nUsed);
-+ rtl_zeroMemory (&RepresentationData (), capacity());
-+ }
-+
-+ /** capacity.
-+ */
-+ sal_uInt16 capacity (void)
-+ {
-+ return (base::PageHeader ().m_aDescr.m_nSize - (base::size()));
-+ }
-+
-+ Representation& RepresentationData ()
-+ {
-+ return *(Representation *) (Data () + base::size ());
-+ }
-+};
-+
-+static sal_uInt16
-+lcl_getPageSize (OStorePageBIOS &rBIOS)
-+{
-+ sal_uInt16 nPageSize = STORE_MAXIMUM_PAGESIZE;
-+ rBIOS.getPageSize(nPageSize);
-+// fprintf (stderr, "page size for extended names %d\n", nPageSize);
-+ return nPageSize;
-+}
-+
-+#define USE_OTHER_BLOCK STORE_INTERNAL_MAX_NAMESIZE
-+
-+storeError
-+OStorePageNameBlockV1::SetName (const rtl_String *pName, OStorePageBIOS &rBIOS)
-+{
-+ rtl_copyMemory (&m_pRepresentation->m_pData[0],
-+ pName->buffer, pName->length);
-+ rtl_zeroMemory (&m_pRepresentation->m_pData[pName->length],
-+ STORE_MAXIMUM_NAMESIZE - pName->length);
-+ return store_E_None;
-+}
-+
-+storeError
-+OStorePageNameBlockV1::Name (rtl_String **pName, OStorePageBIOS &rBIOS)
-+{
-+ sal_Int32 length = rtl_str_getLength(m_pRepresentation->m_pData);
-+ rtl_string_new_WithLength (pName, length + 1);
-+ (*pName)->length = length;
-+ rtl_copyMemory ((*pName)->buffer,
-+ &m_pRepresentation->m_pData[0], length);
-+ (*pName)->buffer [length] = 0;
-+
-+ return store_E_None;
-+}
-+
-+storeError
-+OStorePageNameBlockV2::SetName (const rtl_String *pName, OStorePageBIOS &rBIOS)
-+{
-+ storeError nRet;
-+ sal_Char *pDest;
-+
-+// fprintf (stderr, "setName '%s'\n", pName->buffer);
-+
-+ if (!m_pRepresentation)
-+ return store_E_NotExists;
-+
-+ m_pRepresentation->m_nNameLength = pName->length;
-+
-+ if (pName->length >= USE_OTHER_BLOCK)
-+ {
-+ sal_uInt16 nSize = lcl_getPageSize(rBIOS);
-+#ifdef WNT
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) _alloca (nSize);
-+#else
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) alloca (nSize);
-+#endif
-+ OStorePageLongNameData aNameData (nSize, aPageHeadData);
-+ OStorePageObject aNamePage(aNameData);
-+ if (!m_pRepresentation->m_nNameBlock)
-+ {
-+ if ((nRet = rBIOS.allocate (aNamePage)) != store_E_None)
-+ {
-+ fprintf (stderr, "failed to allocate name page %d\n", nRet);
-+ return nRet;
-+ }
-+ m_pRepresentation->m_nNameBlock = aNameData.location();
-+ }
-+ else
-+ {
-+ aNameData.location (m_pRepresentation->m_nNameBlock);
-+ if ((nRet = rBIOS.load(aNamePage)) != store_E_None)
-+ {
-+ fprintf (stderr, "failed to load name page %d\n", nRet);
-+ return nRet;
-+ }
-+ }
-+ copyAndTerminate (m_pRepresentation->m_pNameData, pName->buffer, USE_OTHER_BLOCK - 1);
-+ copyAndTerminate (aNameData.RepresentationData ().m_nData, pName->buffer + USE_OTHER_BLOCK - 1,
-+ pName->length - (USE_OTHER_BLOCK - 1));
-+
-+ if ((nRet = rBIOS.save (aNamePage)) != store_E_None)
-+ {
-+ fprintf (stderr, "failed to save name page %d\n", nRet);
-+ return nRet;
-+ }
-+ }
-+ else
-+ copyAndTerminate (m_pRepresentation->m_pNameData, pName->buffer, pName->length);
-+
-+ return store_E_None;
-+}
-+
-+storeError
-+OStorePageNameBlockV2::Name (rtl_String **pName, OStorePageBIOS &rBIOS)
-+{
-+ storeError nRet;
-+
-+// fprintf (stderr, "get!Name (%d)...\n", m_nNameLength);
-+
-+ if (!m_pRepresentation)
-+ return store_E_NotExists;
-+
-+ rtl_string_new_WithLength (pName, m_pRepresentation->m_nNameLength + 1);
-+ (*pName)->length = m_pRepresentation->m_nNameLength;
-+
-+ if (m_pRepresentation->m_nNameLength >= USE_OTHER_BLOCK)
-+ {
-+ sal_uInt16 nSize = lcl_getPageSize(rBIOS);
-+#ifdef WNT
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) _alloca (nSize);
-+#else
-+ sal_uInt8 *aPageHeadData = (sal_uInt8 *) alloca (nSize);
-+#endif
-+ OStorePageLongNameData aNameData (nSize, aPageHeadData);
-+ OStorePageObject aNamePage(aNameData);
-+ aNameData.location (m_pRepresentation->m_nNameBlock);
-+
-+ if ((nRet = rBIOS.load(aNamePage)) != store_E_None)
-+ {
-+ fprintf (stderr, "failed to load name page %d\n", nRet);
-+ return nRet;
-+ }
-+
-+ copyAndTerminate ((*pName)->buffer, m_pRepresentation->m_pNameData, USE_OTHER_BLOCK - 1);
-+ copyAndTerminate ((*pName)->buffer + USE_OTHER_BLOCK - 1,
-+ aNameData.RepresentationData ().m_nData, m_pRepresentation->m_nNameLength - (USE_OTHER_BLOCK - 1));
-+ }
-+ else
-+ copyAndTerminate ((*pName)->buffer, m_pRepresentation->m_pNameData, m_pRepresentation->m_nNameLength);
-+
-+// fprintf (stderr, "... returns '%s'\n", (*pName)->buffer);
-+
-+ return store_E_None;
-+}
---- store/source/storbase.hxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/storbase.hxx 2009-04-06 16:42:11.000000000 +0000
-@@ -28,6 +28,8 @@
- *
- ************************************************************************/
-
-+#include <stdio.h>
-+
- #ifndef _STORE_STORBASE_HXX_
- #define _STORE_STORBASE_HXX_ "$Revision: 1.10 $"
-
-@@ -45,12 +47,18 @@
- #include <cstddef>
- #define INCLUDED_CSTDDEF
- #endif
-+#ifndef _RTL_MEMORY_H_
-+#include <rtl/memory.h>
-+#endif
-
- #ifndef INCLUDED_CSTRING
- #include <cstring>
- #define INCLUDED_CSTRING
- #endif
-
-+// #define STORE_INTERNAL_MAX_NAMESIZE 96-4
-+#define STORE_INTERNAL_MAX_NAMESIZE 32
-+
- /*========================================================================
- *
- * store common internals.
-@@ -350,26 +358,101 @@ struct OStorePageLink
- }
- };
-
-+
- /*========================================================================
- *
- * OStorePageNameBlock.
- *
- *======================================================================*/
--struct OStorePageNameBlock
-+
-+class OStorePageBIOS;
-+
-+struct OStorePageNameBlockA
- {
-- typedef OStorePageGuard G;
- typedef OStorePageKey K;
-+ typedef OStorePageGuard G;
-
-- /** Representation.
-+ /** initialize.
- */
-- G m_aGuard;
-- K m_aKey;
-- sal_uInt32 m_nAttrib;
-- sal_Char m_pData[STORE_MAXIMUM_NAMESIZE];
-+ virtual void initialize (void) = 0;
-+
-+ /** Comparison.
-+ */
-+ sal_Bool operator== (const OStorePageNameBlockA& rOther) const
-+ {
-+ return (Guard () == rOther.Guard ());
-+ }
-
- /** size.
- */
-- static sal_uInt16 size (void)
-+ virtual sal_uInt16 size (void) = 0;
-+
-+ /** swap (internal and external representation).
-+ */
-+ virtual void swap (void) = 0;
-+
-+ /** guard (external representation).
-+ */
-+ virtual void guard (void) = 0;
-+
-+ /** verify (external representation).
-+ */
-+ virtual storeError verify (void) = 0;
-+
-+ /** namei.
-+ */
-+ static storeError namei (
-+ const rtl_String *pPath, const rtl_String *pName, K &rKey)
-+ {
-+ // Check parameter.
-+ if (!(pPath && pName))
-+ return store_E_InvalidParameter;
-+
-+ // Check name length.
-+ if (pName->length >= STORE_MAXIMUM_NAMESIZE)
-+ return store_E_NameTooLong;
-+
-+ // Transform pathname into key.
-+ rKey.m_nLow = G::crc32 (0, pName->buffer, pName->length);
-+ rKey.m_nHigh = G::crc32 (0, pPath->buffer, pPath->length);
-+
-+ // Done.
-+ return store_E_None;
-+ }
-+
-+ /** Properties.
-+ */
-+
-+ virtual G Guard () const = 0;
-+
-+ virtual sal_uInt32 Attrib () = 0;
-+ virtual void SetAttrib (sal_uInt32 nAttrib) = 0;
-+ virtual K Key () = 0;
-+ virtual void SetKey (K aKey) = 0;
-+
-+ virtual storeError SetName (const rtl_String *pName, OStorePageBIOS &rBIOS) = 0;
-+ virtual storeError Name (rtl_String **pName, OStorePageBIOS &rBIOS) = 0;
-+};
-+
-+struct OStorePageNameBlockV1 : OStorePageNameBlockA
-+{
-+ typedef OStorePageGuard G;
-+ typedef OStorePageKey K;
-+
-+ struct Representation {
-+ G m_aGuard;
-+ K m_aKey;
-+ sal_uInt32 m_nAttrib;
-+ sal_Char m_pData[STORE_MAXIMUM_NAMESIZE];
-+ };
-+
-+private:
-+ Representation* m_pRepresentation;
-+
-+public:
-+ /** size.
-+ */
-+ sal_uInt16 size (void)
- {
- return sal_uInt16(sizeof(G) + sizeof(K) + sizeof(sal_uInt32) +
- sizeof(sal_Char[STORE_MAXIMUM_NAMESIZE]));
-@@ -379,25 +462,25 @@ struct OStorePageNameBlock
- */
- void initialize (void)
- {
-- m_aGuard = G();
-- m_aKey = K();
-- m_nAttrib = 0;
-- __store_memset (m_pData, 0, sizeof(m_pData));
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard = G();
-+ m_pRepresentation->m_aKey = K();
-+ m_pRepresentation->m_nAttrib = 0;
-+ __store_memset (m_pRepresentation->m_pData, 0, sizeof(m_pRepresentation->m_pData));
-+ }
- }
-
-+
- /** Construction.
- */
-- OStorePageNameBlock (void)
-- : m_nAttrib (0)
-+ OStorePageNameBlockV1 (sal_uInt8 *data)
-+ : m_pRepresentation ((Representation *) data)
- {
-- __store_memset (m_pData, 0, sizeof(m_pData));
- }
-
-- /** Comparison.
-- */
-- sal_Bool operator== (const OStorePageNameBlock& rOther) const
-+ OStorePageNameBlockV1 (void)
-+ : m_pRepresentation (NULL)
- {
-- return (m_aGuard == rOther.m_aGuard);
- }
-
- /** swap (internal and external representation).
-@@ -405,9 +488,11 @@ struct OStorePageNameBlock
- void swap (void)
- {
- #ifdef OSL_BIGENDIAN
-- m_aGuard.swap();
-- m_aKey.swap();
-- m_nAttrib = OSL_SWAPDWORD(m_nAttrib);
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard.swap();
-+ m_pRepresentation->m_aKey.swap();
-+ m_pRepresentation->m_nAttrib = OSL_SWAPDWORD(m_pRepresentation->m_nAttrib);
-+ }
- #endif /* OSL_BIGENDIAN */
- }
-
-@@ -415,51 +500,215 @@ struct OStorePageNameBlock
- */
- void guard (void)
- {
-- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, &m_aKey, size() - sizeof(G));
-+ if (m_pRepresentation) {
-+ sal_uInt32 nCRC32 = 0;
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aKey, size() - sizeof(G));
- #ifdef OSL_BIGENDIAN
-- nCRC32 = OSL_SWAPDWORD(nCRC32);
-+ nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- m_aGuard.m_nCRC32 = nCRC32;
-+ m_pRepresentation->m_aGuard.m_nCRC32 = nCRC32;
-+ }
- }
-
- /** verify (external representation).
- */
- storeError verify (void)
- {
-+ if (!m_pRepresentation)
-+ return store_E_NotExists;
-+
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, &m_aKey, size() - sizeof(G));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aKey, size() - sizeof(G));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- if (m_aGuard.m_nCRC32 != nCRC32)
-+ if (m_pRepresentation->m_aGuard.m_nCRC32 != nCRC32)
- return store_E_InvalidChecksum;
- else
- return store_E_None;
- }
-
-- /** namei.
-+ /** Properties.
-+ */
-+
-+ G Guard () const
-+ {
-+ return m_pRepresentation->m_aGuard;
-+ }
-+
-+ sal_uInt32 Attrib ()
-+ {
-+ if (m_pRepresentation)
-+ return m_pRepresentation->m_nAttrib;
-+ else
-+ return 0;
-+ }
-+
-+ void SetAttrib (sal_uInt32 nAttrib)
-+ {
-+ if (m_pRepresentation)
-+ m_pRepresentation->m_nAttrib = nAttrib;
-+ }
-+
-+ K Key ()
-+ {
-+ if (m_pRepresentation)
-+ return m_pRepresentation->m_aKey;
-+ else
-+ return K (0, 0);
-+ }
-+
-+ void SetKey (K aKey)
-+ {
-+ if (m_pRepresentation)
-+ m_pRepresentation->m_aKey = aKey;
-+ }
-+
-+ storeError SetName (const rtl_String *pName, OStorePageBIOS &rBIOS);
-+ storeError Name (rtl_String **pName, OStorePageBIOS &rBIOS);
-+};
-+
-+struct OStorePageNameBlockV2 : OStorePageNameBlockA
-+{
-+ typedef OStorePageGuard G;
-+ typedef OStorePageKey K;
-+
-+ struct Representation {
-+ G m_aGuard;
-+ K m_aKey;
-+ sal_uInt32 m_nAttrib;
-+ sal_Char m_pNameData[STORE_INTERNAL_MAX_NAMESIZE];
-+ sal_uInt32 m_nNameLength;
-+ sal_uInt32 m_nNameBlock;
-+ };
-+
-+ Representation* m_pRepresentation;
-+
-+ /** size.
- */
-- static storeError namei (
-- const rtl_String *pPath, const rtl_String *pName, K &rKey)
-+ sal_uInt16 size (void)
- {
-- // Check parameter.
-- if (!(pPath && pName))
-- return store_E_InvalidParameter;
-+ return sal_uInt16 (sizeof(G) + sizeof(K) + 3*sizeof(sal_uInt32) +
-+ sizeof(sal_Char[STORE_INTERNAL_MAX_NAMESIZE]));
-+ }
-
-- // Check name length.
-- if (!(pName->length < STORE_MAXIMUM_NAMESIZE))
-- return store_E_NameTooLong;
-+ /** initialize.
-+ */
-+ void initialize (void)
-+ {
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard = G();
-+ m_pRepresentation->m_aKey = K();
-+ m_pRepresentation->m_nAttrib = 0;
-+ m_pRepresentation->m_nNameLength = 0;
-+ m_pRepresentation->m_nNameBlock = 0;
-+ __store_memset (m_pRepresentation->m_pNameData, 0, sizeof(sal_Char[STORE_INTERNAL_MAX_NAMESIZE]));
-+ }
-+ }
-
-- // Transform pathname into key.
-- rKey.m_nLow = G::crc32 (0, pName->buffer, pName->length);
-- rKey.m_nHigh = G::crc32 (0, pPath->buffer, pPath->length);
-+ /** Construction.
-+ */
-+ OStorePageNameBlockV2 (sal_uInt8 *data)
-+ : m_pRepresentation ((Representation *) data)
-+ {
-+ }
-
-- // Done.
-- return store_E_None;
-+ OStorePageNameBlockV2 (void)
-+ : m_pRepresentation (NULL)
-+ // : m_nAttrib (0), m_nNameBlock (0), m_nNameLength (0)
-+ {
-+ // __store_memset (m_pNameData, 0, sizeof(m_pNameData));
-+ }
-+
-+ /** swap (internal and external representation).
-+ */
-+ void swap (void)
-+ {
-+#ifdef OSL_BIGENDIAN
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard.swap();
-+ m_pRepresentation->m_aKey.swap();
-+ m_pRepresentation->m_nAttrib = OSL_SWAPDWORD(m_pRepresentation->m_nAttrib);
-+ m_pRepresentation->m_nNameLength = OSL_SWAPDWORD(m_pRepresentation->m_nNameLength);
-+ m_pRepresentation->m_nNameBlock = OSL_SWAPDWORD(m_pRepresentation->m_nNameBlock);
-+ }
-+#endif /* OSL_BIGENDIAN */
-+ }
-+
-+ /** guard (external representation).
-+ */
-+ void guard (void)
-+ {
-+ if (m_pRepresentation) {
-+ sal_uInt32 nCRC32 = 0;
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aKey, size() - sizeof(G));
-+#ifdef OSL_BIGENDIAN
-+ nCRC32 = OSL_SWAPDWORD(nCRC32);
-+#endif /* OSL_BIGENDIAN */
-+ m_pRepresentation->m_aGuard.m_nCRC32 = nCRC32;
-+ }
-+ }
-+
-+ /** verify (external representation).
-+ */
-+ storeError verify (void)
-+ {
-+ if (!m_pRepresentation)
-+ return store_E_NotExists;
-+
-+ sal_uInt32 nCRC32 = 0;
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aKey, size() - sizeof(G));
-+#ifdef OSL_BIGENDIAN
-+ nCRC32 = OSL_SWAPDWORD(nCRC32);
-+#endif /* OSL_BIGENDIAN */
-+ if (m_pRepresentation->m_aGuard.m_nCRC32 != nCRC32)
-+ return store_E_InvalidChecksum;
-+ else
-+ return store_E_None;
- }
-+
-+ /** Properties.
-+ */
-+
-+ G Guard () const
-+ {
-+ return m_pRepresentation->m_aGuard;
-+ }
-+
-+ sal_uInt32 Attrib ()
-+ {
-+ if (m_pRepresentation)
-+ return m_pRepresentation->m_nAttrib;
-+ else
-+ return 0;
-+ }
-+
-+ void SetAttrib (sal_uInt32 nAttrib)
-+ {
-+ if (m_pRepresentation)
-+ m_pRepresentation->m_nAttrib = nAttrib;
-+ }
-+
-+ K Key ()
-+ {
-+ if (m_pRepresentation)
-+ return m_pRepresentation->m_aKey;
-+ else
-+ return K (0, 0);
-+ }
-+
-+ void SetKey (K aKey)
-+ {
-+ if (m_pRepresentation)
-+ m_pRepresentation->m_aKey = aKey;
-+ }
-+
-+ storeError SetName (const rtl_String *pName, OStorePageBIOS &rBIOS);
-+ storeError Name (rtl_String **pName, OStorePageBIOS &rBIOS);
- };
-
- /*========================================================================
-@@ -475,10 +724,30 @@ struct OStorePageData
-
- /** Representation.
- */
-- G m_aGuard;
-- D m_aDescr;
-- L m_aMarked;
-- L m_aUnused;
-+ struct Representation {
-+ G m_aGuard;
-+ D m_aDescr;
-+ L m_aMarked;
-+ L m_aUnused;
-+ };
-+
-+private:
-+
-+ Representation* m_pPageHeader;
-+
-+public:
-+
-+ inline Representation& PageHeader () const
-+ {
-+ return *m_pPageHeader;
-+ }
-+
-+ /** Representation.
-+ */
-+ inline sal_uInt8* Data () const
-+ {
-+ return (sal_uInt8*) m_pPageHeader;
-+ }
-
- /** size.
- */
-@@ -491,24 +760,30 @@ struct OStorePageData
- */
- sal_uInt32 location (void) const
- {
-- return m_aDescr.m_nAddr;
-+ return PageHeader ().m_aDescr.m_nAddr;
- }
-
- void location (sal_uInt32 nAddr)
- {
-- m_aDescr.m_nAddr = nAddr;
-+ PageHeader ().m_aDescr.m_nAddr = nAddr;
- }
-
- /** Allocation.
- */
- static void* operator new (size_t n)
- {
-+ fprintf (stderr, "warning: OStorePageData allocated without additional space\n");
-+
- return rtl_allocateMemory (n);
- }
-
-- static void* operator new (size_t, sal_uInt16 nPageSize)
-+ static void* operator new (size_t n, sal_uInt16 nPageSize)
- {
-- return rtl_allocateMemory (nPageSize);
-+ void* mem = rtl_allocateMemory (n + nPageSize);
-+
-+ rtl_zeroMemory (((sal_uInt8 *)mem) + n, nPageSize);
-+
-+ return mem;
- }
-
- static void operator delete (void *p)
-@@ -523,18 +798,23 @@ struct OStorePageData
-
- /** Construction.
- */
-- OStorePageData (sal_uInt16 nPageSize)
-+
-+ OStorePageData (sal_uInt16 nPageSize, sal_uInt32 nDataOffset, sal_uInt8* pData = NULL)
- {
-- m_aDescr.m_nSize = nPageSize;
-- m_aDescr.m_nUsed = size();
-+ if (pData)
-+ m_pPageHeader = (Representation *) pData;
-+ else
-+ m_pPageHeader = (Representation *) (((sal_uInt8*) this) + nDataOffset);
-+ PageHeader ().m_aDescr.m_nSize = nPageSize;
-+ PageHeader ().m_aDescr.m_nUsed = size();
- }
-
- OStorePageData& operator= (const OStorePageData& rOther)
- {
-- m_aGuard = rOther.m_aGuard;
-- m_aDescr = rOther.m_aDescr;
-- m_aMarked = rOther.m_aMarked;
-- m_aUnused = rOther.m_aUnused;
-+ PageHeader ().m_aGuard = rOther.PageHeader ().m_aGuard;
-+ PageHeader ().m_aDescr = rOther.PageHeader ().m_aDescr;
-+ PageHeader ().m_aMarked = rOther.PageHeader ().m_aMarked;
-+ PageHeader ().m_aUnused = rOther.PageHeader ().m_aUnused;
- return *this;
- }
-
-@@ -542,10 +822,10 @@ struct OStorePageData
- */
- sal_Bool operator== (const OStorePageData& rOther) const
- {
-- return ((m_aGuard == rOther.m_aGuard ) &&
-- (m_aDescr == rOther.m_aDescr ) &&
-- (m_aMarked == rOther.m_aMarked) &&
-- (m_aUnused == rOther.m_aUnused) );
-+ return ((PageHeader ().m_aGuard == rOther.PageHeader ().m_aGuard ) &&
-+ (PageHeader ().m_aDescr == rOther.PageHeader ().m_aDescr ) &&
-+ (PageHeader ().m_aMarked == rOther.PageHeader ().m_aMarked) &&
-+ (PageHeader ().m_aUnused == rOther.PageHeader ().m_aUnused) );
- }
-
- /** swap (internal and external representation).
-@@ -553,10 +833,10 @@ struct OStorePageData
- void swap ()
- {
- #ifdef OSL_BIGENDIAN
-- m_aGuard.swap();
-- m_aDescr.swap();
-- m_aMarked.swap();
-- m_aUnused.swap();
-+ PageHeader ().m_aGuard.swap();
-+ PageHeader ().m_aDescr.swap();
-+ PageHeader ().m_aMarked.swap();
-+ PageHeader ().m_aUnused.swap();
- #endif /* OSL_BIGENDIAN */
- }
-
-@@ -565,12 +845,12 @@ struct OStorePageData
- void guard ()
- {
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, &m_aDescr, size() - sizeof(G));
-+ nCRC32 = G::crc32 (nCRC32, &PageHeader ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &PageHeader ().m_aDescr, size() - sizeof(G));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- m_aGuard.m_nCRC32 = nCRC32;
-+ PageHeader ().m_aGuard.m_nCRC32 = nCRC32;
- }
-
- /** verify (external representation).
-@@ -578,12 +858,12 @@ struct OStorePageData
- storeError verify ()
- {
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, &m_aDescr, size() - sizeof(G));
-+ nCRC32 = G::crc32 (nCRC32, &PageHeader ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &PageHeader ().m_aDescr, size() - sizeof(G));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- if (m_aGuard.m_nCRC32 != nCRC32)
-+ if (PageHeader ().m_aGuard.m_nCRC32 != nCRC32)
- return store_E_InvalidChecksum;
- else
- return store_E_None;
-@@ -834,6 +1114,10 @@ public:
- ScanContext &rCtx,
- OStorePageObject &rPage);
-
-+ /** version
-+ */
-+ sal_uInt32 version ();
-+
- protected:
- /** Destruction (OReference).
- */
-@@ -842,7 +1126,8 @@ protected:
- /** create (SuperBlock).
- */
- storeError create (
-- sal_uInt16 nPageSize = STORE_DEFAULT_PAGESIZE);
-+ sal_uInt16 nPageSize = STORE_DEFAULT_PAGESIZE,
-+ sal_uInt16 nFormatVersion = STORE_FORMAT_V1);
-
- /** Page Maintenance.
- */
---- store/source/storcach.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/storcach.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -60,7 +60,8 @@ namespace store
- struct OStorePageCacheEntry
- {
- typedef OStorePageCacheEntry self;
-- typedef OStorePageData data;
-+ typedef OStorePageData PD;
-+ typedef sal_uInt8 data;
- typedef OStorePageDescriptor D;
-
- /** Representation.
-@@ -83,34 +84,33 @@ struct OStorePageCacheEntry
-
- /** Construction.
- */
-- OStorePageCacheEntry (const D& rDescr, const data& rData)
-+ OStorePageCacheEntry (const D& rDescr, const PD& rData)
- : m_aDescr (rDescr)
- {
-- sal_uInt16 nSize = m_aDescr.m_nSize;
-- m_pData = new(nSize) data(nSize);
-- __store_memcpy (m_pData, &rData, nSize);
-+ m_pData = (data*) rtl_allocateMemory (m_aDescr.m_nSize);
-+ __store_memcpy (m_pData, rData.Data (), m_aDescr.m_nSize);
- m_pNext = m_pPrev = this;
- }
-
- /** Data assignment.
- */
-- void assign (const D& rDescr, const data& rData)
-+ void assign (const D& rDescr, const PD& rData)
- {
- m_aDescr.m_nAddr = rDescr.m_nAddr;
- if (!(m_aDescr.m_nSize == rDescr.m_nSize))
- {
-- delete m_pData;
-- m_pData = new(rDescr.m_nSize) data(rDescr.m_nSize);
-+ rtl_freeMemory (m_pData);
-+ m_pData = (data*) rtl_allocateMemory (m_aDescr.m_nSize);
- m_aDescr.m_nSize = rDescr.m_nSize;
- }
-- __store_memcpy (m_pData, &rData, m_aDescr.m_nSize);
-+ __store_memcpy (m_pData, rData.Data (), m_aDescr.m_nSize);
- }
-
- /** Destruction.
- */
- ~OStorePageCacheEntry (void)
- {
-- delete m_pData;
-+ rtl_freeMemory (m_pData);
- }
-
- /** Comparison.
-@@ -506,7 +506,7 @@ storeError OStorePageCache::load (
- }
-
- // Load data and Leave.
-- __store_memcpy (&rData, m_pHead->m_pData, rDescr.m_nSize);
-+ __store_memcpy (rData.Data (), m_pHead->m_pData, rDescr.m_nSize);
- STORE_METHOD_LEAVE(pMutex, store_E_None);
- }
- }
-@@ -516,7 +516,7 @@ storeError OStorePageCache::load (
-
- // Load data.
- storeError eErrCode = rBIOS.read (
-- rDescr.m_nAddr, &rData, rDescr.m_nSize);
-+ rDescr.m_nAddr, rData.Data (), rDescr.m_nSize);
- if (eErrCode != store_E_None)
- STORE_METHOD_LEAVE(pMutex, eErrCode);
-
-@@ -576,7 +576,7 @@ storeError OStorePageCache::update (
- m_pHead->dirty();
-
- // Update data and leave.
-- __store_memcpy (m_pHead->m_pData, &rData, rDescr.m_nSize);
-+ __store_memcpy (m_pHead->m_pData, rData.Data (), rDescr.m_nSize);
- STORE_METHOD_LEAVE(pMutex, store_E_None);
- }
- }
---- store/source/stordata.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/stordata.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -51,7 +51,7 @@ using namespace store;
- * OStoreIndirectionPageData.
- */
- OStoreIndirectionPageData::OStoreIndirectionPageData (sal_uInt16 nPageSize)
-- : OStorePageData (nPageSize)
-+ : OStorePageData (nPageSize, sizeof (self))
- {
- initialize();
- }
-@@ -61,14 +61,14 @@ OStoreIndirectionPageData::OStoreIndirec
- */
- void OStoreIndirectionPageData::initialize (void)
- {
-- base::m_aGuard.m_nMagic = STORE_MAGIC_INDIRECTPAGE;
-- base::m_aDescr.m_nUsed = sal::static_int_cast< sal_uInt16 >(
-- base::m_aDescr.m_nUsed + self::size());
-- self::m_aGuard.m_nMagic = 0;
-+ base::PageHeader ().m_aGuard.m_nMagic = STORE_MAGIC_INDIRECTPAGE;
-+ base::PageHeader ().m_aDescr.m_nUsed = sal::static_int_cast< sal_uInt16 >(
-+ base::PageHeader ().m_aDescr.m_nUsed + self::size());
-+ self::DataRepresentation ().m_aGuard.m_nMagic = 0;
-
- sal_uInt16 i, n = capacityCount();
- for (i = 0; i < n; i++)
-- m_pData[i] = STORE_PAGE_NULL;
-+ DataRepresentation ().m_pData[i] = STORE_PAGE_NULL;
- }
-
- /*
-@@ -82,11 +82,11 @@ void OStoreIndirectionPageData::swap (
- )
- {
- #ifdef OSL_BIGENDIAN
-- m_aGuard.swap();
-+ DataRepresentation ().m_aGuard.swap();
-
- sal_uInt16 i, n = capacityCount (rDescr);
- for (i = 0; i < n; i++)
-- m_pData[i] = OSL_SWAPDWORD(m_pData[i]);
-+ DataRepresentation ().m_pData[i] = OSL_SWAPDWORD(DataRepresentation ().m_pData[i]);
- #endif /* OSL_BIGENDIAN */
- }
-
-@@ -149,7 +149,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-
- // Obtain data page location.
-- sal_uInt32 nAddr = m_rPage.m_pData[nSingle];
-+ sal_uInt32 nAddr = m_rPage.DataRepresentation ().m_pData[nSingle];
- if (nAddr == STORE_PAGE_NULL)
- STORE_METHOD_LEAVE(pMutex, store_E_NotExists);
-
-@@ -181,19 +181,19 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-
- // Check single indirect page location.
-- if (m_rPage.m_pData[nDouble] == STORE_PAGE_NULL)
-+ if (m_rPage.DataRepresentation ().m_pData[nDouble] == STORE_PAGE_NULL)
- STORE_METHOD_LEAVE(pMutex, store_E_NotExists);
-
- // Check single indirect page buffer.
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) page(nPageSize);
- }
-
- // Load single indirect page.
- OStoreIndirectionPageObject aSingle (*rpSingle);
-- aSingle.location (m_rPage.m_pData[nDouble]);
-+ aSingle.location (m_rPage.DataRepresentation ().m_pData[nDouble]);
-
- storeError eErrCode = rBIOS.load (aSingle);
- if (eErrCode != store_E_None)
-@@ -229,19 +229,19 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-
- // Check double indirect page location.
-- if (m_rPage.m_pData[nTriple] == STORE_PAGE_NULL)
-+ if (m_rPage.DataRepresentation ().m_pData[nTriple] == STORE_PAGE_NULL)
- STORE_METHOD_LEAVE(pMutex, store_E_NotExists);
-
- // Check double indirect page buffer.
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) page(nPageSize);
- }
-
- // Load double indirect page.
- OStoreIndirectionPageObject aDouble (*rpDouble);
-- aDouble.location (m_rPage.m_pData[nTriple]);
-+ aDouble.location (m_rPage.DataRepresentation ().m_pData[nTriple]);
-
- storeError eErrCode = rBIOS.load (aDouble);
- if (eErrCode != store_E_None)
-@@ -272,7 +272,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, eErrCode);
-
- // Obtain data page location.
-- rData.location (m_rPage.m_pData[nSingle]);
-+ rData.location (m_rPage.DataRepresentation ().m_pData[nSingle]);
- if (rData.location() == STORE_PAGE_NULL)
- {
- // Allocate data page.
-@@ -281,7 +281,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, eErrCode);
-
- // Save data page location.
-- m_rPage.m_pData[nSingle] = rData.location();
-+ m_rPage.DataRepresentation ().m_pData[nSingle] = rData.location();
- touch();
-
- // Save this page.
-@@ -322,13 +322,13 @@ storeError OStoreIndirectionPageObject::
- // Check single indirect page buffer.
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) page(nPageSize);
- }
-
- // Obtain single indirect page location.
- OStoreIndirectionPageObject aSingle (*rpSingle);
-- aSingle.location (m_rPage.m_pData[nDouble]);
-+ aSingle.location (m_rPage.DataRepresentation ().m_pData[nDouble]);
- if (aSingle.location() == STORE_PAGE_NULL)
- {
- // Initialize single indirect page buffer.
-@@ -340,7 +340,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, eErrCode);
-
- // Save single indirect page location.
-- m_rPage.m_pData[nDouble] = aSingle.location();
-+ m_rPage.DataRepresentation ().m_pData[nDouble] = aSingle.location();
- touch();
-
- // Save this page.
-@@ -389,13 +389,13 @@ storeError OStoreIndirectionPageObject::
- // Check double indirect page buffer.
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) page(nPageSize);
- }
-
- // Obtain double indirect page location.
- OStoreIndirectionPageObject aDouble (*rpDouble);
-- aDouble.location (m_rPage.m_pData[nTriple]);
-+ aDouble.location (m_rPage.DataRepresentation ().m_pData[nTriple]);
- if (aDouble.location() == STORE_PAGE_NULL)
- {
- // Initialize double indirect page buffer.
-@@ -407,7 +407,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, eErrCode);
-
- // Save double indirect page location.
-- m_rPage.m_pData[nTriple] = aDouble.location();
-+ m_rPage.DataRepresentation ().m_pData[nTriple] = aDouble.location();
- touch();
-
- // Save this page.
-@@ -448,7 +448,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-
- // Save PageDescriptor.
-- D aDescr (m_rPage.m_aDescr);
-+ D aDescr (m_rPage.PageHeader ().m_aDescr);
-
- // Acquire Lock.
- storeError eErrCode = rBIOS.acquireLock (aDescr.m_nAddr, aDescr.m_nSize);
-@@ -459,7 +459,7 @@ storeError OStoreIndirectionPageObject::
- for (i = n; i > nSingle; i--)
- {
- // Obtain data page location.
-- sal_uInt32 nAddr = m_rPage.m_pData[i - 1];
-+ sal_uInt32 nAddr = m_rPage.DataRepresentation ().m_pData[i - 1];
- if (nAddr == STORE_PAGE_NULL) continue;
-
- // Free data page.
-@@ -472,7 +472,7 @@ storeError OStoreIndirectionPageObject::
- }
-
- // Clear pointer to data page.
-- m_rPage.m_pData[i - 1] = STORE_PAGE_NULL;
-+ m_rPage.DataRepresentation ().m_pData[i - 1] = STORE_PAGE_NULL;
- touch();
- }
-
-@@ -517,7 +517,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-
- // Save PageDescriptor.
-- D aDescr (m_rPage.m_aDescr);
-+ D aDescr (m_rPage.PageHeader ().m_aDescr);
-
- // Acquire Lock.
- storeError eErrCode = rBIOS.acquireLock (aDescr.m_nAddr, aDescr.m_nSize);
-@@ -529,13 +529,13 @@ storeError OStoreIndirectionPageObject::
- for (i = n; i > nDouble + 1; i--)
- {
- // Obtain single indirect page location.
-- sal_uInt32 nAddr = m_rPage.m_pData[i - 1];
-+ sal_uInt32 nAddr = m_rPage.DataRepresentation ().m_pData[i - 1];
- if (nAddr == STORE_PAGE_NULL) continue;
-
- // Check single indirect page buffer.
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) page(nPageSize);
- }
-
-@@ -572,18 +572,18 @@ storeError OStoreIndirectionPageObject::
- }
-
- // Clear pointer to single indirect page.
-- m_rPage.m_pData[i - 1] = STORE_PAGE_NULL;
-+ m_rPage.DataRepresentation ().m_pData[i - 1] = STORE_PAGE_NULL;
- touch();
- }
-
- // Obtain last single indirect page location.
-- sal_uInt32 nAddr = m_rPage.m_pData[nDouble];
-+ sal_uInt32 nAddr = m_rPage.DataRepresentation ().m_pData[nDouble];
- if (nAddr != STORE_PAGE_NULL)
- {
- // Check single indirect page buffer.
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) page(nPageSize);
- }
-
-@@ -623,7 +623,7 @@ storeError OStoreIndirectionPageObject::
- }
-
- // Clear pointer to last single indirect page.
-- m_rPage.m_pData[nDouble] = STORE_PAGE_NULL;
-+ m_rPage.DataRepresentation ().m_pData[nDouble] = STORE_PAGE_NULL;
- touch();
- }
- }
-@@ -672,7 +672,7 @@ storeError OStoreIndirectionPageObject::
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-
- // Save PageDescriptor.
-- D aDescr (m_rPage.m_aDescr);
-+ D aDescr (m_rPage.PageHeader ().m_aDescr);
-
- // Acquire Lock.
- storeError eErrCode = rBIOS.acquireLock (aDescr.m_nAddr, aDescr.m_nSize);
-@@ -684,13 +684,13 @@ storeError OStoreIndirectionPageObject::
- for (i = n; i > nTriple + 1; i--)
- {
- // Obtain double indirect page location.
-- sal_uInt32 nAddr = m_rPage.m_pData[i - 1];
-+ sal_uInt32 nAddr = m_rPage.DataRepresentation ().m_pData[i - 1];
- if (nAddr == STORE_PAGE_NULL) continue;
-
- // Check double indirect page buffer.
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) page(nPageSize);
- }
-
-@@ -728,18 +728,18 @@ storeError OStoreIndirectionPageObject::
- }
-
- // Clear pointer to double indirect page.
-- m_rPage.m_pData[i - 1] = STORE_PAGE_NULL;
-+ m_rPage.DataRepresentation ().m_pData[i - 1] = STORE_PAGE_NULL;
- touch();
- }
-
- // Obtain last double indirect page location.
-- sal_uInt32 nAddr = m_rPage.m_pData[nTriple];
-+ sal_uInt32 nAddr = m_rPage.DataRepresentation ().m_pData[nTriple];
- if (nAddr != STORE_PAGE_NULL)
- {
- // Check double indirect page buffer.
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) page(nPageSize);
- }
-
-@@ -780,7 +780,7 @@ storeError OStoreIndirectionPageObject::
- }
-
- // Clear pointer to last double indirect page.
-- m_rPage.m_pData[nTriple] = STORE_PAGE_NULL;
-+ m_rPage.DataRepresentation ().m_pData[nTriple] = STORE_PAGE_NULL;
- touch();
- }
- }
-@@ -808,13 +808,13 @@ storeError OStoreIndirectionPageObject::
-
- /*========================================================================
- *
-- * OStoreDirectoryDataBlock::LinkTable implementation.
-+ * OStoreDirectoryDataBlockV1::LinkTable implementation.
- *
- *======================================================================*/
- /*
- * LinkTable::LinkTable.
- */
--OStoreDirectoryDataBlock::LinkTable::LinkTable (void)
-+OStoreDirectoryDataBlockV1::LinkTable::LinkTable (void)
- {
- initialize();
- }
-@@ -822,39 +822,87 @@ OStoreDirectoryDataBlock::LinkTable::Lin
- /*
- * LinkTable::initialize.
- */
--void OStoreDirectoryDataBlock::LinkTable::initialize (void)
-+void OStoreDirectoryDataBlockV1::LinkTable::initialize (void)
- {
- sal_Int32 i;
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_DIRECT; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DIRECT_V1; i++)
- m_pDirect[i] = STORE_PAGE_NULL;
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_SINGLE; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_SINGLE_V1; i++)
- m_pSingle[i] = STORE_PAGE_NULL;
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_DOUBLE; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DOUBLE_V1; i++)
- m_pDouble[i] = STORE_PAGE_NULL;
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_TRIPLE; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_TRIPLE_V1; i++)
- m_pTriple[i] = STORE_PAGE_NULL;
- }
-
- /*
- * LinkTable::swap.
- */
--void OStoreDirectoryDataBlock::LinkTable::swap (void)
-+void OStoreDirectoryDataBlockV1::LinkTable::swap (void)
- {
- #ifdef OSL_BIGENDIAN
- sal_Int32 i;
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_DIRECT; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DIRECT_V1; i++)
- m_pDirect[i] = OSL_SWAPDWORD(m_pDirect[i]);
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_SINGLE; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_SINGLE_V1; i++)
- m_pSingle[i] = OSL_SWAPDWORD(m_pSingle[i]);
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_DOUBLE; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DOUBLE_V1; i++)
- m_pDouble[i] = OSL_SWAPDWORD(m_pDouble[i]);
-- for (i = 0; i < STORE_LIMIT_DATAPAGE_TRIPLE; i++)
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_TRIPLE_V1; i++)
- m_pTriple[i] = OSL_SWAPDWORD(m_pTriple[i]);
- #endif /* OSL_BIGENDIAN */
- }
-
- /*========================================================================
- *
-+ * OStoreDirectoryDataBlockV2::LinkTable implementation.
-+ *
-+ *======================================================================*/
-+/*
-+ * LinkTable::LinkTable.
-+ */
-+OStoreDirectoryDataBlockV2::LinkTable::LinkTable (void)
-+{
-+ initialize();
-+}
-+
-+/*
-+ * LinkTable::initialize.
-+ */
-+void OStoreDirectoryDataBlockV2::LinkTable::initialize (void)
-+{
-+ sal_Int32 i;
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DIRECT_V2; i++)
-+ m_pDirect[i] = STORE_PAGE_NULL;
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_SINGLE_V2; i++)
-+ m_pSingle[i] = STORE_PAGE_NULL;
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DOUBLE_V2; i++)
-+ m_pDouble[i] = STORE_PAGE_NULL;
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_TRIPLE_V2; i++)
-+ m_pTriple[i] = STORE_PAGE_NULL;
-+}
-+
-+/*
-+ * LinkTable::swap.
-+ */
-+void OStoreDirectoryDataBlockV2::LinkTable::swap (void)
-+{
-+#ifdef OSL_BIGENDIAN
-+ sal_Int32 i;
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DIRECT_V2; i++)
-+ m_pDirect[i] = OSL_SWAPDWORD(m_pDirect[i]);
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_SINGLE_V2; i++)
-+ m_pSingle[i] = OSL_SWAPDWORD(m_pSingle[i]);
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_DOUBLE_V2; i++)
-+ m_pDouble[i] = OSL_SWAPDWORD(m_pDouble[i]);
-+ for (i = 0; i < STORE_LIMIT_DATAPAGE_TRIPLE_V2; i++)
-+ m_pTriple[i] = OSL_SWAPDWORD(m_pTriple[i]);
-+#endif /* OSL_BIGENDIAN */
-+}
-+
-+
-+/*========================================================================
-+ *
- * OStoreDirectoryPageObject implementation.
- *
- *======================================================================*/
-@@ -901,13 +949,13 @@ storeError OStoreDirectoryPageObject::ve
- OStoreDirectoryPageData::ChunkScope
- OStoreDirectoryPageObject::scope (
- sal_uInt32 nPage,
-- page::DataBlock::LinkDescriptor &rDescr) const
-+ page::DataBlockT::LinkDescriptor &rDescr) const
- {
- typedef OStoreIndirectionPageData indrct;
- sal_uInt32 index0, index1, index2, index3;
-
- // direct.
-- sal_uInt32 nCount = m_rPage.m_aDataBlock.directCount();
-+ sal_uInt32 nCount = m_rPage.DataBlock ().directCount();
- sal_uInt32 nLimit = nCount;
- if (nPage < nLimit)
- {
-@@ -923,8 +971,8 @@ OStoreDirectoryPageObject::scope (
- nPage -= nLimit;
-
- // single indirect.
-- sal_uInt32 nCapacity = indrct::capacityCount(m_rPage.m_aDescr);
-- nCount = m_rPage.m_aDataBlock.singleCount();
-+ sal_uInt32 nCapacity = indrct::capacityCount(m_rPage.PageHeader ().m_aDescr);
-+ nCount = m_rPage.DataBlock ().singleCount();
- nLimit = nCount * nCapacity;
- if (nPage < nLimit)
- {
-@@ -951,7 +999,7 @@ OStoreDirectoryPageObject::scope (
- nPage -= nLimit;
-
- // double indirect.
-- nCount = m_rPage.m_aDataBlock.doubleCount();
-+ nCount = m_rPage.DataBlock ().doubleCount();
- nLimit = nCount * nCapacity * nCapacity;
- if (nPage < nLimit)
- {
-@@ -984,7 +1032,7 @@ OStoreDirectoryPageObject::scope (
- nPage -= nLimit;
-
- // triple indirect.
-- nCount = m_rPage.m_aDataBlock.tripleCount();
-+ nCount = m_rPage.DataBlock ().tripleCount();
- nLimit = nCount * nCapacity * nCapacity * nCapacity;
- if (nPage < nLimit)
- {
-@@ -1041,7 +1089,7 @@ storeError OStoreDirectoryPageObject::ge
- STORE_METHOD_ENTER(pMutex);
-
- // Determine scope and link indices.
-- page::DataBlock::LinkDescriptor aLink;
-+ page::DataBlockT::LinkDescriptor aLink;
- page::ChunkScope eScope = scope (nPage, aLink);
-
- storeError eErrCode = store_E_None;
-@@ -1062,7 +1110,7 @@ storeError OStoreDirectoryPageObject::ge
-
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1085,7 +1133,7 @@ storeError OStoreDirectoryPageObject::ge
-
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1110,7 +1158,7 @@ storeError OStoreDirectoryPageObject::ge
-
- if (rpTriple == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpTriple = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1161,7 +1209,7 @@ storeError OStoreDirectoryPageObject::pu
- STORE_METHOD_ENTER(pMutex);
-
- // Determine scope and link indices.
-- page::DataBlock::LinkDescriptor aLink;
-+ page::DataBlockT::LinkDescriptor aLink;
- page::ChunkScope eScope = scope (nPage, aLink);
-
- storeError eErrCode = store_E_None;
-@@ -1185,7 +1233,7 @@ storeError OStoreDirectoryPageObject::pu
- {
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1216,7 +1264,7 @@ storeError OStoreDirectoryPageObject::pu
- {
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1249,7 +1297,7 @@ storeError OStoreDirectoryPageObject::pu
- {
- if (rpTriple == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpTriple = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1312,7 +1360,7 @@ storeError OStoreDirectoryPageObject::tr
- STORE_METHOD_ENTER(pMutex);
-
- // Determine scope and link indices.
-- page::DataBlock::LinkDescriptor aLink;
-+ page::DataBlockT::LinkDescriptor aLink;
- page::ChunkScope eScope = scope (nPage, aLink);
-
- storeError eErrCode = store_E_None;
-@@ -1381,7 +1429,7 @@ storeError OStoreDirectoryPageObject::tr
- // Check single indirect page buffer.
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1438,7 +1486,7 @@ storeError OStoreDirectoryPageObject::tr
- // Check double indirect page buffer.
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1489,7 +1537,7 @@ storeError OStoreDirectoryPageObject::tr
- // Check triple indirect page buffer.
- if (rpTriple == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpTriple = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1560,7 +1608,7 @@ storeError OStoreDirectoryPageObject::tr
- if (eScope == page::SCOPE_DIRECT)
- {
- // Truncate direct data pages.
-- sal_uInt16 i, n = m_rPage.m_aDataBlock.directCount();
-+ sal_uInt16 i, n = m_rPage.DataBlock ().directCount();
- for (i = n; i > nRemain; i--)
- {
- // Obtain data page location.
-@@ -1584,7 +1632,7 @@ storeError OStoreDirectoryPageObject::tr
- if (eScope == page::SCOPE_SINGLE)
- {
- // Truncate single indirect pages.
-- sal_uInt16 i, n = m_rPage.m_aDataBlock.singleCount();
-+ sal_uInt16 i, n = m_rPage.DataBlock ().singleCount();
- for (i = n; i > nRemain; i--)
- {
- // Obtain single indirect page location.
-@@ -1594,7 +1642,7 @@ storeError OStoreDirectoryPageObject::tr
- // Check single indirect page buffer.
- if (rpSingle == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpSingle = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1628,7 +1676,7 @@ storeError OStoreDirectoryPageObject::tr
- if (eScope == page::SCOPE_DOUBLE)
- {
- // Truncate double indirect pages.
-- sal_uInt16 i, n = m_rPage.m_aDataBlock.doubleCount();
-+ sal_uInt16 i, n = m_rPage.DataBlock ().doubleCount();
- for (i = n; i > nRemain; i--)
- {
- // Obtain double indirect page location.
-@@ -1638,7 +1686,7 @@ storeError OStoreDirectoryPageObject::tr
- // Check double indirect page buffer.
- if (rpDouble == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpDouble = new(nPageSize) indirect(nPageSize);
- }
-
-@@ -1672,7 +1720,7 @@ storeError OStoreDirectoryPageObject::tr
- if (eScope == page::SCOPE_TRIPLE)
- {
- // Truncate triple indirect pages.
-- sal_uInt16 i, n = m_rPage.m_aDataBlock.tripleCount();
-+ sal_uInt16 i, n = m_rPage.DataBlock ().tripleCount();
- for (i = n; i > nRemain; i--)
- {
- // Obtain triple indirect page location.
-@@ -1682,7 +1730,7 @@ storeError OStoreDirectoryPageObject::tr
- // Check triple indirect page buffer.
- if (rpTriple == NULL)
- {
-- sal_uInt16 nPageSize = m_rPage.m_aDescr.m_nSize;
-+ sal_uInt16 nPageSize = m_rPage.PageHeader ().m_aDescr.m_nSize;
- rpTriple = new(nPageSize) indirect(nPageSize);
- }
-
---- store/source/stordata.hxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/stordata.hxx 2009-04-06 16:42:11.000000000 +0000
-@@ -55,10 +55,6 @@ struct OStoreDataPageData : public store
-
- typedef OStorePageDescriptor D;
-
-- /** Representation.
-- */
-- sal_uInt8 m_pData[1];
--
- /** size.
- */
- static sal_uInt16 size (void)
-@@ -66,6 +62,11 @@ struct OStoreDataPageData : public store
- return sal_uInt16(0);
- }
-
-+ sal_uInt8* RepresentationData ()
-+ {
-+ return base::Data () + base::size ();
-+ }
-+
- /** capacity.
- */
- static sal_uInt16 capacity (const D& rDescr)
-@@ -75,7 +76,7 @@ struct OStoreDataPageData : public store
-
- sal_uInt16 capacity (void) const
- {
-- return self::capacity (base::m_aDescr);
-+ return self::capacity (base::PageHeader ().m_aDescr);
- }
-
- /** usage.
-@@ -87,23 +88,23 @@ struct OStoreDataPageData : public store
-
- sal_uInt16 usage (void) const
- {
-- return self::usage (base::m_aDescr);
-+ return self::usage (base::PageHeader ().m_aDescr);
- }
-
- /** initialize.
- */
- void initialize (void)
- {
-- base::m_aGuard.m_nMagic = STORE_MAGIC_DATAPAGE;
-- base::m_aDescr.m_nUsed = sal::static_int_cast< sal_uInt16 >(
-- base::m_aDescr.m_nUsed + self::size());
-- rtl_zeroMemory (m_pData, capacity());
-+ base::PageHeader ().m_aGuard.m_nMagic = STORE_MAGIC_DATAPAGE;
-+ base::PageHeader ().m_aDescr.m_nUsed = sal::static_int_cast< sal_uInt16 >(
-+ base::PageHeader ().m_aDescr.m_nUsed + self::size());
-+ rtl_zeroMemory (RepresentationData (), capacity());
- }
-
- /** Construction.
- */
- OStoreDataPageData (sal_uInt16 nPageSize)
-- : base (nPageSize)
-+ : base (nPageSize, sizeof (self))
- {
- initialize();
- }
-@@ -152,8 +153,15 @@ struct OStoreIndirectionPageData : publi
-
- /** Representation.
- */
-- G m_aGuard;
-- sal_uInt32 m_pData[1];
-+ struct Representation {
-+ G m_aGuard;
-+ sal_uInt32 m_pData[1];
-+ };
-+
-+ inline Representation& DataRepresentation () const
-+ {
-+ return *(Representation *) (Data () + base::size ());
-+ }
-
- /** size.
- */
-@@ -170,7 +178,7 @@ struct OStoreIndirectionPageData : publi
- }
- sal_uInt16 capacity (void) const
- {
-- return self::capacity (base::m_aDescr);
-+ return self::capacity (base::PageHeader ().m_aDescr);
- }
-
- /** capacityCount.
-@@ -193,7 +201,7 @@ struct OStoreIndirectionPageData : publi
- */
- sal_Bool operator== (const OStoreIndirectionPageData& rOther) const
- {
-- return (base::operator==(rOther) && (m_aGuard == rOther.m_aGuard));
-+ return (base::operator==(rOther) && (DataRepresentation ().m_aGuard == rOther.DataRepresentation ().m_aGuard));
- }
-
- /** swap (internal and external representation).
-@@ -205,12 +213,12 @@ struct OStoreIndirectionPageData : publi
- void guard (const D& rDescr)
- {
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, m_pData, capacity(rDescr));
-+ nCRC32 = G::crc32 (nCRC32, &DataRepresentation ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, DataRepresentation ().m_pData, capacity(rDescr));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- m_aGuard.m_nCRC32 = nCRC32;
-+ DataRepresentation ().m_aGuard.m_nCRC32 = nCRC32;
- }
-
- /** verify (external representation).
-@@ -218,12 +226,12 @@ struct OStoreIndirectionPageData : publi
- storeError verify (const D& rDescr)
- {
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, m_pData, capacity(rDescr));
-+ nCRC32 = G::crc32 (nCRC32, &DataRepresentation ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, DataRepresentation ().m_pData, capacity(rDescr));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- if (m_aGuard.m_nCRC32 != nCRC32)
-+ if (DataRepresentation ().m_aGuard.m_nCRC32 != nCRC32)
- return store_E_InvalidChecksum;
- else
- return store_E_None;
-@@ -347,12 +355,17 @@ inline OStoreIndirectionPageObject::OSto
- * OStoreDirectoryDataBlock.
- *
- *======================================================================*/
--#define STORE_LIMIT_DATAPAGE_DIRECT 16
--#define STORE_LIMIT_DATAPAGE_SINGLE 8
--#define STORE_LIMIT_DATAPAGE_DOUBLE 1
--#define STORE_LIMIT_DATAPAGE_TRIPLE 1
-+#define STORE_LIMIT_DATAPAGE_DIRECT_V1 16
-+#define STORE_LIMIT_DATAPAGE_SINGLE_V1 8
-+#define STORE_LIMIT_DATAPAGE_DOUBLE_V1 1
-+#define STORE_LIMIT_DATAPAGE_TRIPLE_V1 1
-+
-+#define STORE_LIMIT_DATAPAGE_DIRECT_V2 4
-+#define STORE_LIMIT_DATAPAGE_SINGLE_V2 2
-+#define STORE_LIMIT_DATAPAGE_DOUBLE_V2 1
-+#define STORE_LIMIT_DATAPAGE_TRIPLE_V2 1
-
--struct OStoreDirectoryDataBlock
-+struct OStoreDirectoryDataBlockA
- {
- typedef OStorePageGuard G;
-
-@@ -377,16 +390,83 @@ struct OStoreDirectoryDataBlock
- {}
- };
-
-+ /** initialize.
-+ */
-+ virtual void initialize (void) = 0;
-+
-+ /** Comparison.
-+ */
-+ sal_Bool operator== (const OStoreDirectoryDataBlockA& rOther) const
-+ {
-+ return (Guard () == rOther.Guard ());
-+ }
-+
-+ /** size.
-+ */
-+ virtual sal_uInt16 size (void) = 0;
-+
-+ /** Properties.
-+ */
-+ virtual G Guard () const = 0;
-+
-+ virtual sal_uInt32 DataLen () = 0;
-+ virtual void SetDataLen (sal_uInt32 len) = 0;
-+
-+// /** Comparison.
-+// */
-+// virtual sal_Bool operator== (const OStoreDirectoryDataBlockV2& rOther) const = 0;
-+
-+ /** swap (internal and external representation).
-+ */
-+ virtual void swap (void) = 0;
-+
-+ /** guard (external representation).
-+ */
-+ virtual void guard (void) = 0;
-+
-+ /** verify (external representation).
-+ */
-+ virtual storeError verify (void) = 0;
-+
-+ /** direct.
-+ */
-+ virtual sal_uInt16 directCount (void) const = 0;
-+ virtual sal_uInt32 directLink (sal_uInt16 nIndex) const = 0;
-+ virtual void directLink (sal_uInt16 nIndex, sal_uInt32 nAddr) = 0;
-+
-+ /** single.
-+ */
-+ virtual sal_uInt16 singleCount (void) const = 0;
-+ virtual sal_uInt32 singleLink (sal_uInt16 nIndex) const = 0;
-+ virtual void singleLink (sal_uInt16 nIndex, sal_uInt32 nAddr) = 0;
-+
-+ /** double.
-+ */
-+ virtual sal_uInt16 doubleCount (void) const = 0;
-+ virtual sal_uInt32 doubleLink (sal_uInt16 nIndex) const = 0;
-+ virtual void doubleLink (sal_uInt16 nIndex, sal_uInt32 nAddr) = 0;
-+
-+ /** triple.
-+ */
-+ virtual sal_uInt16 tripleCount (void) const = 0;
-+ virtual sal_uInt32 tripleLink (sal_uInt16 nIndex) const = 0;
-+ virtual void tripleLink (sal_uInt16 nIndex, sal_uInt32 nAddr) = 0;
-+};
-+
-+struct OStoreDirectoryDataBlockV1 : OStoreDirectoryDataBlockA
-+{
-+ typedef OStorePageGuard G;
-+
- /** LinkTable.
- */
- struct LinkTable
- {
- /** Representation.
- */
-- sal_uInt32 m_pDirect[STORE_LIMIT_DATAPAGE_DIRECT];
-- sal_uInt32 m_pSingle[STORE_LIMIT_DATAPAGE_SINGLE];
-- sal_uInt32 m_pDouble[STORE_LIMIT_DATAPAGE_DOUBLE];
-- sal_uInt32 m_pTriple[STORE_LIMIT_DATAPAGE_TRIPLE];
-+ sal_uInt32 m_pDirect[STORE_LIMIT_DATAPAGE_DIRECT_V1];
-+ sal_uInt32 m_pSingle[STORE_LIMIT_DATAPAGE_SINGLE_V1];
-+ sal_uInt32 m_pDouble[STORE_LIMIT_DATAPAGE_DOUBLE_V1];
-+ sal_uInt32 m_pTriple[STORE_LIMIT_DATAPAGE_TRIPLE_V1];
-
- /** Construction.
- */
-@@ -398,15 +478,235 @@ struct OStoreDirectoryDataBlock
- void swap (void);
- };
-
-- /** Representation.
-+ struct Representation {
-+ G m_aGuard;
-+ LinkTable m_aTable;
-+ sal_uInt32 m_nDataLen;
-+ };
-+
-+ Representation* m_pRepresentation;
-+
-+ /** size.
- */
-- G m_aGuard;
-- LinkTable m_aTable;
-- sal_uInt32 m_nDataLen;
-+ sal_uInt16 size (void)
-+ {
-+ return sal_uInt16(sizeof(G) + sizeof(LinkTable) + sizeof(sal_uInt32));
-+ }
-+
-+ /** initialize.
-+ */
-+ void initialize (void)
-+ {
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard = G();
-+ m_pRepresentation->m_aTable.initialize();
-+ m_pRepresentation->m_nDataLen = 0;
-+ }
-+ }
-+
-+ /** Construction.
-+ */
-+ OStoreDirectoryDataBlockV1 (sal_uInt8 *data)
-+ : m_pRepresentation ((Representation *) data)
-+ {
-+ initialize ();
-+ }
-+
-+ /** Properties.
-+ */
-+ G Guard () const
-+ {
-+ return m_pRepresentation->m_aGuard;
-+ }
-+
-+ sal_uInt32 DataLen ()
-+ {
-+ if (m_pRepresentation)
-+ return m_pRepresentation->m_nDataLen;
-+ else
-+ return 0;
-+ }
-+
-+ void SetDataLen (sal_uInt32 len)
-+ {
-+ if (m_pRepresentation)
-+ m_pRepresentation->m_nDataLen = len;
-+ }
-+
-+ /** Comparison.
-+ */
-+ sal_Bool operator== (const OStoreDirectoryDataBlockV1& rOther) const
-+ {
-+ if (m_pRepresentation == NULL && rOther.m_pRepresentation == NULL)
-+ return sal_True;
-+
-+ if (m_pRepresentation == NULL || rOther.m_pRepresentation == NULL)
-+ return sal_False;
-+
-+ return (m_pRepresentation->m_aGuard == rOther.m_pRepresentation->m_aGuard);
-+ }
-+
-+ /** swap (internal and external representation).
-+ */
-+ void swap (void)
-+ {
-+#ifdef OSL_BIGENDIAN
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard.swap();
-+ m_pRepresentation->m_aTable.swap();
-+ m_pRepresentation->m_nDataLen = OSL_SWAPDWORD(m_pRepresentation->m_nDataLen);
-+ }
-+#endif /* OSL_BIGENDIAN */
-+ }
-+
-+ /** guard (external representation).
-+ */
-+ void guard (void)
-+ {
-+ if (!m_pRepresentation)
-+ return;
-+
-+ sal_uInt32 nCRC32 = 0;
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aTable, size() - sizeof(G));
-+#ifdef OSL_BIGENDIAN
-+ nCRC32 = OSL_SWAPDWORD(nCRC32);
-+#endif /* OSL_BIGENDIAN */
-+ m_pRepresentation->m_aGuard.m_nCRC32 = nCRC32;
-+ }
-+
-+ /** verify (external representation).
-+ */
-+ storeError verify (void)
-+ {
-+ if (!m_pRepresentation)
-+ return store_E_NotExists;
-+
-+ sal_uInt32 nCRC32 = 0;
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aTable, size() - sizeof(G));
-+#ifdef OSL_BIGENDIAN
-+ nCRC32 = OSL_SWAPDWORD(nCRC32);
-+#endif /* OSL_BIGENDIAN */
-+ if (m_pRepresentation->m_aGuard.m_nCRC32 != nCRC32)
-+ return store_E_InvalidChecksum;
-+ else
-+ return store_E_None;
-+ }
-+
-+ /** direct.
-+ */
-+ virtual sal_uInt16 directCount (void) const
-+ {
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_DIRECT_V1));
-+ }
-+ virtual sal_uInt32 directLink (sal_uInt16 nIndex) const
-+ {
-+ if (m_pRepresentation && nIndex < directCount())
-+ return m_pRepresentation->m_aTable.m_pDirect[nIndex];
-+ else
-+ return STORE_PAGE_NULL;
-+ }
-+ virtual void directLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ {
-+ if (m_pRepresentation && nIndex < directCount())
-+ m_pRepresentation->m_aTable.m_pDirect[nIndex] = nAddr;
-+ }
-+
-+ /** single.
-+ */
-+ virtual sal_uInt16 singleCount (void) const
-+ {
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_SINGLE_V1));
-+ }
-+ virtual sal_uInt32 singleLink (sal_uInt16 nIndex) const
-+ {
-+ if (m_pRepresentation && nIndex < singleCount())
-+ return m_pRepresentation->m_aTable.m_pSingle[nIndex];
-+ else
-+ return STORE_PAGE_NULL;
-+ }
-+ virtual void singleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ {
-+ if (m_pRepresentation && nIndex < singleCount())
-+ m_pRepresentation->m_aTable.m_pSingle[nIndex] = nAddr;
-+ }
-+
-+ /** double.
-+ */
-+ virtual sal_uInt16 doubleCount (void) const
-+ {
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_DOUBLE_V1));
-+ }
-+ virtual sal_uInt32 doubleLink (sal_uInt16 nIndex) const
-+ {
-+ if (m_pRepresentation && nIndex < doubleCount())
-+ return m_pRepresentation->m_aTable.m_pDouble[nIndex];
-+ else
-+ return STORE_PAGE_NULL;
-+ }
-+ virtual void doubleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ {
-+ if (m_pRepresentation && nIndex < doubleCount())
-+ m_pRepresentation->m_aTable.m_pDouble[nIndex] = nAddr;
-+ }
-+
-+ /** triple.
-+ */
-+ virtual sal_uInt16 tripleCount (void) const
-+ {
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_TRIPLE_V1));
-+ }
-+ virtual sal_uInt32 tripleLink (sal_uInt16 nIndex) const
-+ {
-+ if (m_pRepresentation && nIndex < tripleCount())
-+ return m_pRepresentation->m_aTable.m_pTriple[nIndex];
-+ else
-+ return STORE_PAGE_NULL;
-+ }
-+ virtual void tripleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ {
-+ if (m_pRepresentation && nIndex < tripleCount())
-+ m_pRepresentation->m_aTable.m_pTriple[nIndex] = nAddr;
-+ }
-+};
-+
-+struct OStoreDirectoryDataBlockV2 : OStoreDirectoryDataBlockA
-+{
-+ typedef OStorePageGuard G;
-+
-+ /** LinkTable.
-+ */
-+ struct LinkTable
-+ {
-+ /** Representation.
-+ */
-+ sal_uInt32 m_pDirect[STORE_LIMIT_DATAPAGE_DIRECT_V2];
-+ sal_uInt32 m_pSingle[STORE_LIMIT_DATAPAGE_SINGLE_V2];
-+ sal_uInt32 m_pDouble[STORE_LIMIT_DATAPAGE_DOUBLE_V2];
-+ sal_uInt32 m_pTriple[STORE_LIMIT_DATAPAGE_TRIPLE_V2];
-+
-+ /** Construction.
-+ */
-+ LinkTable (void);
-+ void initialize (void);
-+
-+ /** swap (internal and external representation).
-+ */
-+ void swap (void);
-+ };
-+
-+ struct Representation {
-+ G m_aGuard;
-+ LinkTable m_aTable;
-+ sal_uInt32 m_nDataLen;
-+ };
-+
-+ Representation* m_pRepresentation;
-
- /** size.
- */
-- static sal_uInt16 size (void)
-+ sal_uInt16 size (void)
- {
- return sal_uInt16(sizeof(G) + sizeof(LinkTable) + sizeof(sal_uInt32));
- }
-@@ -415,22 +715,53 @@ struct OStoreDirectoryDataBlock
- */
- void initialize (void)
- {
-- m_aGuard = G();
-- m_aTable.initialize();
-- m_nDataLen = 0;
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard = G();
-+ m_pRepresentation->m_aTable.initialize();
-+ m_pRepresentation->m_nDataLen = 0;
-+ }
- }
-
- /** Construction.
- */
-- OStoreDirectoryDataBlock (void)
-- : m_nDataLen (0)
-- {}
-+ OStoreDirectoryDataBlockV2 (sal_uInt8 *data)
-+ : m_pRepresentation ((Representation *) data)
-+ {
-+ initialize ();
-+ }
-+
-+ /** Properties.
-+ */
-+ G Guard () const
-+ {
-+ return m_pRepresentation->m_aGuard;
-+ }
-+
-+ sal_uInt32 DataLen ()
-+ {
-+ if (m_pRepresentation)
-+ return m_pRepresentation->m_nDataLen;
-+ else
-+ return 0;
-+ }
-+
-+ void SetDataLen (sal_uInt32 len)
-+ {
-+ if (m_pRepresentation)
-+ m_pRepresentation->m_nDataLen = len;
-+ }
-
- /** Comparison.
- */
-- sal_Bool operator== (const OStoreDirectoryDataBlock& rOther) const
-+ sal_Bool operator== (const OStoreDirectoryDataBlockV2& rOther) const
- {
-- return (m_aGuard == rOther.m_aGuard);
-+ if (m_pRepresentation == NULL && rOther.m_pRepresentation == NULL)
-+ return sal_True;
-+
-+ if (m_pRepresentation == NULL || rOther.m_pRepresentation == NULL)
-+ return sal_False;
-+
-+ return (m_pRepresentation->m_aGuard == rOther.m_pRepresentation->m_aGuard);
- }
-
- /** swap (internal and external representation).
-@@ -438,9 +769,11 @@ struct OStoreDirectoryDataBlock
- void swap (void)
- {
- #ifdef OSL_BIGENDIAN
-- m_aGuard.swap();
-- m_aTable.swap();
-- m_nDataLen = OSL_SWAPDWORD(m_nDataLen);
-+ if (m_pRepresentation) {
-+ m_pRepresentation->m_aGuard.swap();
-+ m_pRepresentation->m_aTable.swap();
-+ m_pRepresentation->m_nDataLen = OSL_SWAPDWORD(m_pRepresentation->m_nDataLen);
-+ }
- #endif /* OSL_BIGENDIAN */
- }
-
-@@ -448,26 +781,32 @@ struct OStoreDirectoryDataBlock
- */
- void guard (void)
- {
-+ if (!m_pRepresentation)
-+ return;
-+
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, &m_aTable, size() - sizeof(G));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aTable, size() - sizeof(G));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- m_aGuard.m_nCRC32 = nCRC32;
-+ m_pRepresentation->m_aGuard.m_nCRC32 = nCRC32;
- }
-
- /** verify (external representation).
- */
- storeError verify (void)
- {
-+ if (!m_pRepresentation)
-+ return store_E_NotExists;
-+
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, &m_aTable, size() - sizeof(G));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, &m_pRepresentation->m_aTable, size() - sizeof(G));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- if (m_aGuard.m_nCRC32 != nCRC32)
-+ if (m_pRepresentation->m_aGuard.m_nCRC32 != nCRC32)
- return store_E_InvalidChecksum;
- else
- return store_E_None;
-@@ -475,78 +814,78 @@ struct OStoreDirectoryDataBlock
-
- /** direct.
- */
-- static sal_uInt16 directCount (void)
-+ virtual sal_uInt16 directCount (void) const
- {
-- return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_DIRECT));
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_DIRECT_V2));
- }
-- sal_uInt32 directLink (sal_uInt16 nIndex) const
-+ virtual sal_uInt32 directLink (sal_uInt16 nIndex) const
- {
-- if (nIndex < directCount())
-- return m_aTable.m_pDirect[nIndex];
-+ if (m_pRepresentation && nIndex < directCount())
-+ return m_pRepresentation->m_aTable.m_pDirect[nIndex];
- else
- return STORE_PAGE_NULL;
- }
-- void directLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ virtual void directLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- if (nIndex < directCount())
-- m_aTable.m_pDirect[nIndex] = nAddr;
-+ if (m_pRepresentation && nIndex < directCount())
-+ m_pRepresentation->m_aTable.m_pDirect[nIndex] = nAddr;
- }
-
- /** single.
- */
-- static sal_uInt16 singleCount (void)
-+ virtual sal_uInt16 singleCount (void) const
- {
-- return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_SINGLE));
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_SINGLE_V2));
- }
-- sal_uInt32 singleLink (sal_uInt16 nIndex) const
-+ virtual sal_uInt32 singleLink (sal_uInt16 nIndex) const
- {
-- if (nIndex < singleCount())
-- return m_aTable.m_pSingle[nIndex];
-+ if (m_pRepresentation && nIndex < singleCount())
-+ return m_pRepresentation->m_aTable.m_pSingle[nIndex];
- else
- return STORE_PAGE_NULL;
- }
-- void singleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ virtual void singleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- if (nIndex < singleCount())
-- m_aTable.m_pSingle[nIndex] = nAddr;
-+ if (m_pRepresentation && nIndex < singleCount())
-+ m_pRepresentation->m_aTable.m_pSingle[nIndex] = nAddr;
- }
-
- /** double.
- */
-- static sal_uInt16 doubleCount (void)
-+ virtual sal_uInt16 doubleCount (void) const
- {
-- return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_DOUBLE));
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_DOUBLE_V2));
- }
-- sal_uInt32 doubleLink (sal_uInt16 nIndex) const
-+ virtual sal_uInt32 doubleLink (sal_uInt16 nIndex) const
- {
-- if (nIndex < doubleCount())
-- return m_aTable.m_pDouble[nIndex];
-+ if (m_pRepresentation && nIndex < doubleCount())
-+ return m_pRepresentation->m_aTable.m_pDouble[nIndex];
- else
- return STORE_PAGE_NULL;
- }
-- void doubleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ virtual void doubleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- if (nIndex < doubleCount())
-- m_aTable.m_pDouble[nIndex] = nAddr;
-+ if (m_pRepresentation && nIndex < doubleCount())
-+ m_pRepresentation->m_aTable.m_pDouble[nIndex] = nAddr;
- }
-
- /** triple.
- */
-- static sal_uInt16 tripleCount (void)
-+ virtual sal_uInt16 tripleCount (void) const
- {
-- return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_TRIPLE));
-+ return ((sal_uInt16)(STORE_LIMIT_DATAPAGE_TRIPLE_V2));
- }
-- sal_uInt32 tripleLink (sal_uInt16 nIndex) const
-+ virtual sal_uInt32 tripleLink (sal_uInt16 nIndex) const
- {
-- if (nIndex < tripleCount())
-- return m_aTable.m_pTriple[nIndex];
-+ if (m_pRepresentation && nIndex < tripleCount())
-+ return m_pRepresentation->m_aTable.m_pTriple[nIndex];
- else
- return STORE_PAGE_NULL;
- }
-- void tripleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
-+ virtual void tripleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- if (nIndex < tripleCount())
-- m_aTable.m_pTriple[nIndex] = nAddr;
-+ if (m_pRepresentation && nIndex < tripleCount())
-+ m_pRepresentation->m_aTable.m_pTriple[nIndex] = nAddr;
- }
- };
-
-@@ -562,76 +901,124 @@ struct OStoreDirectoryPageData : public
- typedef OStorePageData base;
- typedef OStoreDirectoryPageData self;
-
-- typedef OStorePageDescriptor D;
-- typedef OStorePageNameBlock NameBlock;
-- typedef OStoreDirectoryDataBlock DataBlock;
-+ typedef OStorePageDescriptor D;
-+ typedef OStorePageNameBlockA NameBlockT;
-+ typedef OStoreDirectoryDataBlockA DataBlockT;
-
- /** Representation.
- */
-- NameBlock m_aNameBlock;
-- DataBlock m_aDataBlock;
-- sal_uInt8 m_pData[1];
-+ OStorePageNameBlockA* m_pNameBlock;
-+ OStoreDirectoryDataBlockA* m_pDataBlock;
-+ sal_uInt8* m_pData;
-
- /** size.
- */
-- static sal_uInt16 size (void)
-+ sal_uInt16 size () const
- {
-- return (NameBlock::size() + DataBlock::size());
-+ return m_pNameBlock->size () + m_pDataBlock->size ();
- }
-
- /** capacity.
- */
-- static sal_uInt16 capacity (const D& rDescr)
-+ sal_uInt16 capacity (const D& rDescr) const
- {
-- return (rDescr.m_nSize - (base::size() + self::size()));
-+ return (rDescr.m_nSize - (base::size() + size()));
- }
- sal_uInt16 capacity (void) const
- {
-- return self::capacity (base::m_aDescr);
-+ return capacity (base::PageHeader ().m_aDescr);
- }
-
- /** usage.
- */
-- static sal_uInt16 usage (const D& rDescr)
-+ sal_uInt16 usage (const D& rDescr) const
- {
-- return (rDescr.m_nUsed - (base::size() + self::size()));
-+ return (rDescr.m_nUsed - (base::size() + size()));
- }
- sal_uInt16 usage (void) const
- {
-- return self::usage (base::m_aDescr);
-+ return usage (base::PageHeader ().m_aDescr);
- }
-
- /** initialize.
- */
- void initialize (void)
- {
-- base::m_aGuard.m_nMagic = STORE_MAGIC_DIRECTORYPAGE;
-- base::m_aDescr.m_nUsed = base::size() + self::size();
-+ base::PageHeader ().m_aGuard.m_nMagic = STORE_MAGIC_DIRECTORYPAGE;
-+ base::PageHeader ().m_aDescr.m_nUsed = base::size() + self::size();
-
-- m_aNameBlock.initialize();
-- m_aDataBlock.initialize();
-+ m_pNameBlock->initialize();
-+ m_pDataBlock->initialize();
-
-- rtl_zeroMemory (m_pData, capacity());
-+ rtl_zeroMemory (m_pData, capacity());
- }
-
- /** Construction.
- */
-- OStoreDirectoryPageData (sal_uInt16 nPageSize)
-- : base (nPageSize)
-+ OStoreDirectoryPageData (sal_uInt16 nPageSize, OStorePageBIOS* pBIOS)
-+ : base (nPageSize, sizeof (self))
- {
-- base::m_aGuard.m_nMagic = STORE_MAGIC_DIRECTORYPAGE;
-- base::m_aDescr.m_nUsed = sal::static_int_cast< sal_uInt16 >(
-- base::m_aDescr.m_nUsed + self::size());
-+ base::PageHeader ().m_aGuard.m_nMagic = STORE_MAGIC_DIRECTORYPAGE;
-+
-+ sal_uInt8* pMem = ((sal_uInt8*) this) + sizeof (self) + base::size ();
-+
-+ switch (pBIOS->version ()) {
-+ case 1:
-+ m_pNameBlock = new OStorePageNameBlockV1 (pMem);
-+ m_pDataBlock = new OStoreDirectoryDataBlockV1 (pMem + m_pNameBlock->size ());
-+ m_pData = pMem + m_pNameBlock->size () + m_pDataBlock->size ();
-+ break;
-+ case 2:
-+ m_pNameBlock = new OStorePageNameBlockV2 (pMem);
-+ m_pDataBlock = new OStoreDirectoryDataBlockV2 (pMem + m_pNameBlock->size ());
-+ m_pData = pMem + m_pNameBlock->size () + m_pDataBlock->size ();
-+ break;
-+ default:
-+ OSL_TRACE("wrong store BIOS/SuperPage version");
-+ *((int *)NULL) = 0;
-+ m_pNameBlock = NULL;
-+ m_pDataBlock = NULL;
-+ m_pData = NULL;
-+ }
-+
- rtl_zeroMemory (m_pData, capacity());
- }
-
-+ ~OStoreDirectoryPageData ()
-+ {
-+ if (m_pNameBlock) {
-+ delete m_pNameBlock;
-+ m_pNameBlock = NULL;
-+ }
-+
-+ if (m_pDataBlock) {
-+ delete m_pDataBlock;
-+ m_pDataBlock = NULL;
-+ }
-+ }
-+
-+ inline OStoreDirectoryDataBlockA& DataBlock () const
-+ {
-+ return *m_pDataBlock;
-+ }
-+
-+ inline OStorePageNameBlockA& NameBlock () const
-+ {
-+ return *m_pNameBlock;
-+ }
-+
-+ inline sal_uInt8* Data () const
-+ {
-+ return m_pData;
-+ }
-+
- /** Comparsion.
- */
- sal_Bool operator== (const OStoreDirectoryPageData& rOther) const
- {
- return ((base::operator==(rOther) ) &&
-- (m_aNameBlock == rOther.m_aNameBlock) &&
-- (m_aDataBlock == rOther.m_aDataBlock) );
-+ (NameBlock () == rOther.NameBlock ()) &&
-+ (DataBlock () == rOther.DataBlock ()));
- }
-
- /** swap (internal and external representation).
-@@ -639,8 +1026,8 @@ struct OStoreDirectoryPageData : public
- void swap ()
- {
- #ifdef OSL_BIGENDIAN
-- m_aNameBlock.swap();
-- m_aDataBlock.swap();
-+ NameBlock ().swap();
-+ DataBlock ().swap();
- #endif /* OSL_BIGENDIAN */
- }
-
-@@ -648,17 +1035,17 @@ struct OStoreDirectoryPageData : public
- */
- void guard ()
- {
-- m_aNameBlock.guard();
-- m_aDataBlock.guard();
-+ m_pNameBlock->guard();
-+ m_pDataBlock->guard();
- }
-
- /** verify (external representation).
- */
- storeError verify ()
- {
-- storeError eErrCode = m_aNameBlock.verify();
-+ storeError eErrCode = m_pNameBlock->verify();
- if (eErrCode == store_E_None)
-- eErrCode = m_aDataBlock.verify();
-+ eErrCode = m_pDataBlock->verify();
- return eErrCode;
- }
-
-@@ -736,11 +1123,11 @@ public:
- */
- sal_uInt32 attrib (void) const
- {
-- return m_rPage.m_aNameBlock.m_nAttrib;
-+ return m_rPage.NameBlock ().Attrib ();
- }
- void attrib (sal_uInt32 nAttrib)
- {
-- m_rPage.m_aNameBlock.m_nAttrib = nAttrib;
-+ m_rPage.NameBlock ().SetAttrib (nAttrib);
- touch();
- }
-
-@@ -748,11 +1135,11 @@ public:
- */
- sal_uInt32 dataLength (void) const
- {
-- return m_rPage.m_aDataBlock.m_nDataLen;
-+ return m_rPage.DataBlock ().DataLen ();
- }
- void dataLength (sal_uInt32 nLength)
- {
-- m_rPage.m_aDataBlock.m_nDataLen = nLength;
-+ m_rPage.DataBlock ().SetDataLen (nLength);
- touch();
- }
-
-@@ -760,11 +1147,11 @@ public:
- */
- sal_uInt32 directLink (sal_uInt16 nIndex) const
- {
-- return m_rPage.m_aDataBlock.directLink (nIndex);
-+ return m_rPage.DataBlock ().directLink (nIndex);
- }
- void directLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- m_rPage.m_aDataBlock.directLink (nIndex, nAddr);
-+ m_rPage.DataBlock ().directLink (nIndex, nAddr);
- touch();
- }
-
-@@ -772,11 +1159,11 @@ public:
- */
- sal_uInt32 singleLink (sal_uInt16 nIndex) const
- {
-- return m_rPage.m_aDataBlock.singleLink (nIndex);
-+ return m_rPage.DataBlock ().singleLink (nIndex);
- }
- void singleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- m_rPage.m_aDataBlock.singleLink (nIndex, nAddr);
-+ m_rPage.DataBlock ().singleLink (nIndex, nAddr);
- touch();
- }
-
-@@ -784,11 +1171,11 @@ public:
- */
- sal_uInt32 doubleLink (sal_uInt16 nIndex) const
- {
-- return m_rPage.m_aDataBlock.doubleLink (nIndex);
-+ return m_rPage.DataBlock ().doubleLink (nIndex);
- }
- void doubleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- m_rPage.m_aDataBlock.doubleLink (nIndex, nAddr);
-+ m_rPage.DataBlock ().doubleLink (nIndex, nAddr);
- touch();
- }
-
-@@ -796,11 +1183,11 @@ public:
- */
- sal_uInt32 tripleLink (sal_uInt16 nIndex) const
- {
-- return m_rPage.m_aDataBlock.tripleLink (nIndex);
-+ return m_rPage.DataBlock ().tripleLink (nIndex);
- }
- void tripleLink (sal_uInt16 nIndex, sal_uInt32 nAddr)
- {
-- m_rPage.m_aDataBlock.tripleLink (nIndex, nAddr);
-+ m_rPage.DataBlock ().tripleLink (nIndex, nAddr);
- touch();
- }
-
-@@ -808,7 +1195,7 @@ public:
- */
- page::ChunkScope scope (
- sal_uInt32 nPage,
-- page::DataBlock::LinkDescriptor &rDescr) const;
-+ page::DataBlockT::LinkDescriptor &rDescr) const;
-
- /** get (external data page).
- */
---- store/source/store.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/store.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -132,7 +132,7 @@ storeError SAL_CALL store_createMemoryFi
- return store_E_OutOfMemory;
-
- storeError eErrCode = xManager->initializeManager (
-- &*xLockBytes, store_AccessCreate, nPageSize);
-+ &*xLockBytes, store_AccessCreate, nPageSize, STORE_FORMAT_V2);
- if (eErrCode != store_E_None)
- return eErrCode;
-
-@@ -149,7 +149,8 @@ storeError SAL_CALL store_openFile (
- rtl_uString *pFilename,
- storeAccessMode eAccessMode,
- sal_uInt16 nPageSize,
-- storeFileHandle *phFile
-+ storeFileHandle *phFile,
-+ sal_uInt16 nFormatVersion
- ) SAL_THROW_EXTERN_C()
- {
- if (phFile)
-@@ -171,7 +172,7 @@ storeError SAL_CALL store_openFile (
- return store_E_OutOfMemory;
-
- eErrCode = xManager->initializeManager (
-- &*xLockBytes, eAccessMode, nPageSize);
-+ &*xLockBytes, eAccessMode, nPageSize, nFormatVersion);
- if (eErrCode != store_E_None)
- return eErrCode;
-
-@@ -581,7 +582,7 @@ storeError SAL_CALL store_attrib (
- OString aName (pName->buffer, pName->length, RTL_TEXTENCODING_UTF8);
- OStorePageKey aKey;
-
-- eErrCode = OStorePageNameBlock::namei (aPath.pData, aName.pData, aKey);
-+ eErrCode = OStorePageNameBlockA::namei (aPath.pData, aName.pData, aKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-
-@@ -622,7 +623,7 @@ storeError SAL_CALL store_link (
- pSrcName->buffer, pSrcName->length, RTL_TEXTENCODING_UTF8);
- OStorePageKey aSrcKey;
-
-- eErrCode = OStorePageNameBlock::namei (
-+ eErrCode = OStorePageNameBlockA::namei (
- aSrcPath.pData, aSrcName.pData, aSrcKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-@@ -634,7 +635,7 @@ storeError SAL_CALL store_link (
- pDstName->buffer, pDstName->length, RTL_TEXTENCODING_UTF8);
- OStorePageKey aDstKey;
-
-- eErrCode = OStorePageNameBlock::namei (
-+ eErrCode = OStorePageNameBlockA::namei (
- aDstPath.pData, aDstName.pData, aDstKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-@@ -672,7 +673,7 @@ storeError SAL_CALL store_symlink (
- pDstName->buffer, pDstName->length, RTL_TEXTENCODING_UTF8);
- OStorePageKey aDstKey;
-
-- eErrCode = OStorePageNameBlock::namei (
-+ eErrCode = OStorePageNameBlockA::namei (
- aDstPath.pData, aDstName.pData, aDstKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-@@ -715,7 +716,7 @@ storeError SAL_CALL store_rename (
- pSrcName->buffer, pSrcName->length, RTL_TEXTENCODING_UTF8);
- OStorePageKey aSrcKey;
-
-- eErrCode = OStorePageNameBlock::namei (
-+ eErrCode = OStorePageNameBlockA::namei (
- aSrcPath.pData, aSrcName.pData, aSrcKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-@@ -753,7 +754,7 @@ storeError SAL_CALL store_remove (
- OString aName (pName->buffer, pName->length, RTL_TEXTENCODING_UTF8);
- OStorePageKey aKey;
-
-- eErrCode = OStorePageNameBlock::namei (aPath.pData, aName.pData, aKey);
-+ eErrCode = OStorePageNameBlockA::namei (aPath.pData, aName.pData, aKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-
---- store/source/storlckb.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/storlckb.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -88,7 +88,7 @@ static storeError __store_iget (
- {
- // Setup inode page key.
- OStorePageKey aKey;
-- storeError eErrCode = OStorePageNameBlock::namei (pPath, pName, aKey);
-+ storeError eErrCode = OStorePageNameBlockA::namei (pPath, pName, aKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-
-@@ -117,12 +117,9 @@ static storeError __store_iget (
- return store_E_AccessViolation;
-
- // Setup inode nameblock.
-- rNode.m_aNameBlock.m_aKey = aKey;
-- rNode.m_aNameBlock.m_nAttrib = nAttrib;
--
-- rtl_copyMemory (
-- &rNode.m_aNameBlock.m_pData[0],
-- pName->buffer, pName->length);
-+ rNode.NameBlock ().SetKey (aKey);
-+ rNode.NameBlock ().SetAttrib (nAttrib);
-+ rNode.NameBlock ().SetName (pName, rManager);
-
- // Save inode page.
- eErrCode = rManager.save (aKey, aPage);
-@@ -135,7 +132,7 @@ static storeError __store_iget (
- {
- // Obtain 'Destination' page key.
- OStorePageKey aDstKey;
-- rtl_copyMemory (&aDstKey, &rNode.m_pData[0], sizeof(aDstKey));
-+ rtl_copyMemory (&aDstKey, rNode.Data (), sizeof(aDstKey));
-
- #ifdef OSL_BIGENDIAN
- // Swap to internal representation.
-@@ -218,7 +215,7 @@ storeError OStoreDirectory::create (
- return eErrCode;
-
- delete m_pNode;
-- m_pNode = new(m_aDescr.m_nSize) inode(m_aDescr.m_nSize);
-+ m_pNode = new(m_aDescr.m_nSize) inode(m_aDescr.m_nSize, pManager);
- if (!m_pNode)
- return store_E_OutOfMemory;
-
-@@ -231,21 +228,24 @@ storeError OStoreDirectory::create (
- if (eErrCode != store_E_None)
- return eErrCode;
-
-- sal_uInt32 nAttrib = m_pNode->m_aNameBlock.m_nAttrib;
-+ sal_uInt32 nAttrib = m_pNode->NameBlock ().Attrib ();
- if (!(nAttrib & STORE_ATTRIB_ISDIR))
- return store_E_NotDirectory;
-
-- m_aDescr = m_pNode->m_aDescr;
-+ m_aDescr = m_pNode->PageHeader ().m_aDescr;
- eErrCode = xManager->acquirePage (m_aDescr, store_AccessReadOnly);
- if (eErrCode == store_E_None)
- {
- // Evaluate iteration path from NameBlock.
- typedef OStorePageGuard G;
-- sal_Char *pszName = m_pNode->m_aNameBlock.m_pData;
-+ rtl_String *pItemName = NULL;
-+ if ((eErrCode = m_pNode->NameBlock ().Name (&pItemName, *pManager)) != store_E_None)
-+ return eErrCode;
-
-- m_nPath = m_pNode->m_aNameBlock.m_aKey.m_nHigh;
-- m_nPath = G::crc32 (m_nPath, pszName, rtl_str_getLength(pszName));
-+ m_nPath = m_pNode->NameBlock ().Key ().m_nHigh;
-+ m_nPath = G::crc32 (m_nPath, pItemName->buffer, pItemName->length);
- m_nPath = G::crc32 (m_nPath, "/", 1);
-+ rtl_string_release (pItemName);
-
- // Accept page manager.
- m_xManager = xManager;
-@@ -290,8 +290,13 @@ storeError OStoreDirectory::iterate (sto
- if (eErrCode == store_E_None)
- {
- // Setup FindData.
-- sal_Char *p = m_pNode->m_aNameBlock.m_pData;
-- sal_Size n = rtl_str_getLength (p);
-+
-+ rtl_String *pItemName = NULL;
-+ if ((eErrCode = m_pNode->NameBlock ().Name (&pItemName, *m_xManager)) != store_E_None)
-+ return eErrCode;
-+
-+ sal_Char *p = pItemName->buffer;
-+ sal_Size n = pItemName->length;
- sal_Size k = rFindData.m_nLength;
-
- n = __store_convertTextToUnicode (
-@@ -302,6 +307,7 @@ storeError OStoreDirectory::iterate (sto
- k = (k - n) * sizeof(sal_Unicode);
- rtl_zeroMemory (&rFindData.m_pszName[n], k);
- }
-+ rtl_string_release (pItemName);
-
- rFindData.m_nLength = n;
- rFindData.m_nAttrib |= aPage.attrib();
-@@ -356,7 +362,7 @@ OStoreLockBytes::~OStoreLockBytes (void)
- osl::MutexGuard aGuard (*m_xManager);
- if (m_pNode)
- {
-- OStorePageDescriptor aDescr (m_pNode->m_aDescr);
-+ OStorePageDescriptor aDescr (m_pNode->PageHeader ().m_aDescr);
- m_xManager->releasePage (aDescr);
- }
- }
-@@ -415,7 +421,7 @@ storeError OStoreLockBytes::create (
- return eErrCode;
-
- delete m_pNode;
-- m_pNode = new(m_nPageSize) inode(m_nPageSize);
-+ m_pNode = new(m_nPageSize) inode(m_nPageSize, pManager);
- if (!m_pNode)
- return store_E_OutOfMemory;
-
-@@ -428,7 +434,7 @@ storeError OStoreLockBytes::create (
- if (eErrCode != store_E_None)
- return eErrCode;
-
-- sal_uInt32 nAttrib = m_pNode->m_aNameBlock.m_nAttrib;
-+ sal_uInt32 nAttrib = m_pNode->NameBlock ().Attrib ();
- if (!(nAttrib & STORE_ATTRIB_ISFILE))
- {
- // No ISFILE in older versions (backward compatibility).
-@@ -437,7 +443,7 @@ storeError OStoreLockBytes::create (
- }
-
- // ...
-- OStorePageDescriptor aDescr (m_pNode->m_aDescr);
-+ OStorePageDescriptor aDescr (m_pNode->PageHeader ().m_aDescr);
- if (eMode != store_AccessReadOnly)
- eErrCode = xManager->acquirePage (aDescr, store_AccessReadWrite);
- else
-@@ -504,7 +510,7 @@ storeError OStoreLockBytes::readAt (
-
- rtl_copyMemory (
- &pData[rnDone],
-- &m_pNode->m_pData[aDescr.m_nOffset],
-+ m_pNode->Data () + aDescr.m_nOffset,
- nLength);
-
- // Adjust counters.
-@@ -543,7 +549,7 @@ storeError OStoreLockBytes::readAt (
- {
- rtl_copyMemory (
- &pData[rnDone],
-- &m_pData->m_pData[aDescr.m_nOffset],
-+ &m_pData->RepresentationData ()[aDescr.m_nOffset],
- nLength);
- }
-
-@@ -601,7 +607,7 @@ storeError OStoreLockBytes::writeAt (
- nLength = SAL_MIN(nLength, nBytes);
-
- rtl_copyMemory (
-- &m_pNode->m_pData[aDescr.m_nOffset],
-+ m_pNode->Data () + aDescr.m_nOffset,
- &pData[rnDone], nLength);
-
- // Mark inode dirty.
-@@ -641,7 +647,7 @@ storeError OStoreLockBytes::writeAt (
- return eErrCode;
-
- rtl_zeroMemory (
-- &m_pData->m_pData[0],
-+ m_pData->RepresentationData (),
- m_pData->capacity());
- }
- }
-@@ -650,7 +656,7 @@ storeError OStoreLockBytes::writeAt (
- nLength = SAL_MIN(nLength, nBytes);
-
- rtl_copyMemory (
-- &m_pData->m_pData[aDescr.m_nOffset],
-+ m_pData->RepresentationData () + aDescr.m_nOffset,
- &pData[rnDone], nLength);
-
- // Save data page.
-@@ -740,7 +746,7 @@ storeError OStoreLockBytes::setSize (sal
- // Truncate internal data page.
- inode::ChunkDescriptor aDescr (nSize, m_pNode->capacity());
- rtl_zeroMemory (
-- &m_pNode->m_pData[aDescr.m_nOffset],
-+ m_pNode->Data () + aDescr.m_nOffset,
- aDescr.m_nLength);
- }
- else
-@@ -784,7 +790,7 @@ storeError OStoreLockBytes::stat (sal_uI
- if (!m_xManager.is())
- return store_E_InvalidAccess;
-
-- rnSize = m_pNode->m_aDataBlock.m_nDataLen;
-+ rnSize = m_pNode->DataBlock ().DataLen ();
- return store_E_None;
- }
-
---- store/source/storpage.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/storpage.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -112,7 +112,8 @@ sal_Bool SAL_CALL OStorePageManager::isK
- storeError OStorePageManager::initializeManager (
- ILockBytes *pLockBytes,
- storeAccessMode eAccessMode,
-- sal_uInt16 nPageSize)
-+ sal_uInt16 nPageSize,
-+ sal_uInt16 nFormatVersion)
- {
- // Acquire exclusive access.
- osl::MutexGuard aGuard(*this);
-@@ -135,7 +136,7 @@ storeError OStorePageManager::initialize
- return store_E_NotExists;
-
- // Create.
-- eErrCode = base::create (nPageSize);
-+ eErrCode = base::create (nPageSize, nFormatVersion);
- if (eErrCode != store_E_None)
- return eErrCode;
- }
-@@ -194,10 +195,10 @@ storeError OStorePageManager::free (OSto
-
- // Check for cacheable page.
- OStorePageData &rData = rPage.getData();
-- if (rData.m_aGuard.m_nMagic == STORE_MAGIC_BTREENODE)
-+ if (rData.PageHeader ().m_aGuard.m_nMagic == STORE_MAGIC_BTREENODE)
- {
- // Invalidate cache entry.
-- storeError eErrCode = m_pCache->invalidate (rData.m_aDescr);
-+ storeError eErrCode = m_pCache->invalidate (rData.PageHeader ().m_aDescr);
- if (eErrCode != store_E_None)
- return eErrCode;
- }
-@@ -221,10 +222,10 @@ storeError OStorePageManager::load (OSto
-
- // Check for cacheable page.
- OStorePageData &rData = rPage.getData();
-- if (rData.m_aGuard.m_nMagic == STORE_MAGIC_BTREENODE)
-+ if (rData.PageHeader ().m_aGuard.m_nMagic == STORE_MAGIC_BTREENODE)
- {
- // Save PageDescriptor.
-- OStorePageDescriptor aDescr (rData.m_aDescr);
-+ OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-
- // Load (cached) page.
- storeError eErrCode = m_pCache->load (aDescr, rData, *this);
-@@ -271,10 +272,10 @@ storeError OStorePageManager::save (OSto
-
- // Check for cacheable page.
- OStorePageData &rData = rPage.getData();
-- if (rData.m_aGuard.m_nMagic == STORE_MAGIC_BTREENODE)
-+ if (rData.PageHeader ().m_aGuard.m_nMagic == STORE_MAGIC_BTREENODE)
- {
- // Save PageDescriptor.
-- OStorePageDescriptor aDescr (rData.m_aDescr);
-+ OStorePageDescriptor aDescr (rData.PageHeader ().m_aDescr);
-
- #ifdef OSL_BIGENDIAN
- // Swap to external representation.
-@@ -365,7 +366,7 @@ storeError OStorePageManager::find (cons
- }
-
- // Check address.
-- sal_uInt32 nAddr = rPage.m_pData[i].m_aLink.m_nAddr;
-+ sal_uInt32 nAddr = rPage.DataRepresentation ().m_pData[i].m_aLink.m_nAddr;
- if (nAddr == STORE_PAGE_NULL)
- {
- // Path to entry not exists (Must not happen(?)).
-@@ -405,7 +406,7 @@ storeError OStorePageManager::find (
-
- // Pre-allocate left most entry (ugly, but we can't insert to left).
- rPage.insert (0, entry());
-- rPage.m_pData[0].m_aKey.m_nLow = OStorePageGuard::crc32 (0, "/", 1);
-+ rPage.DataRepresentation ().m_pData[0].m_aKey.m_nLow = OStorePageGuard::crc32 (0, "/", 1);
-
- // Allocate RootNode.
- eErrCode = base::allocate (aRoot, ALLOCATE_EOF);
-@@ -436,7 +437,7 @@ storeError OStorePageManager::find (
- }
-
- // Check address.
-- sal_uInt32 nAddr = rPage.m_pData[i].m_aLink.m_nAddr;
-+ sal_uInt32 nAddr = rPage.DataRepresentation ().m_pData[i].m_aLink.m_nAddr;
- if (nAddr == STORE_PAGE_NULL)
- {
- // Path to entry not exists (Must not happen(?)).
-@@ -499,13 +500,13 @@ storeError OStorePageManager::remove (
- }
-
- // Compare entry.
-- entry::CompareResult result = rEntry.compare (rPage.m_pData[i]);
-+ entry::CompareResult result = rEntry.compare (rPage.DataRepresentation ().m_pData[i]);
-
- // Iterate down until equal match.
- while ((result == entry::COMPARE_GREATER) && (rPage.depth() > 0))
- {
- // Check link address.
-- sal_uInt32 nAddr = rPage.m_pData[i].m_aLink.m_nAddr;
-+ sal_uInt32 nAddr = rPage.DataRepresentation ().m_pData[i].m_aLink.m_nAddr;
- if (nAddr == STORE_PAGE_NULL)
- {
- // Path to entry not exists (Must not happen(?)).
-@@ -529,7 +530,7 @@ storeError OStorePageManager::remove (
- }
-
- // Compare entry.
-- result = rEntry.compare (rPage.m_pData[i]);
-+ result = rEntry.compare (rPage.DataRepresentation ().m_pData[i]);
- }
-
- OSL_POSTCOND(
-@@ -581,14 +582,14 @@ storeError OStorePageManager::load (
- }
-
- // Check for exact match.
-- if (!(e.compare (m_pNode[0]->m_pData[i]) == entry::COMPARE_EQUAL))
-+ if (!(e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]) == entry::COMPARE_EQUAL))
- {
- // Page not present.
- return store_E_NotExists;
- }
-
- // Existing entry. Check address.
-- sal_uInt32 nAddr = m_pNode[0]->m_pData[i].m_aLink.m_nAddr;
-+ sal_uInt32 nAddr = m_pNode[0]->DataRepresentation ().m_pData[i].m_aLink.m_nAddr;
- if (nAddr == STORE_PAGE_NULL)
- {
- // Page not present.
-@@ -632,7 +633,7 @@ storeError OStorePageManager::save (
- if (i < n)
- {
- // Compare entry.
-- entry::CompareResult result = e.compare (m_pNode[0]->m_pData[i]);
-+ entry::CompareResult result = e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]);
- OSL_POSTCOND(
- result != entry::COMPARE_LESS,
- "OStorePageManager::save(): find failed");
-@@ -647,7 +648,7 @@ storeError OStorePageManager::save (
- if (result == entry::COMPARE_EQUAL)
- {
- // Existing entry. Check address.
-- sal_uInt32 nAddr = m_pNode[0]->m_pData[i].m_aLink.m_nAddr;
-+ sal_uInt32 nAddr = m_pNode[0]->DataRepresentation ().m_pData[i].m_aLink.m_nAddr;
- if (nAddr == STORE_PAGE_NULL)
- {
- // Allocate page.
-@@ -656,7 +657,7 @@ storeError OStorePageManager::save (
- return eErrCode;
-
- // Modify page address.
-- m_pNode[0]->m_pData[i].m_aLink.m_nAddr = rPage.location();
-+ m_pNode[0]->DataRepresentation ().m_pData[i].m_aLink.m_nAddr = rPage.location();
-
- // Save modified NodePage.
- node aNode (*m_pNode[0]);
-@@ -720,14 +721,14 @@ storeError OStorePageManager::attrib (
- }
-
- // Check for exact match.
-- if (!(e.compare (m_pNode[0]->m_pData[i]) == entry::COMPARE_EQUAL))
-+ if (!(e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]) == entry::COMPARE_EQUAL))
- {
- // Page not present.
- return store_E_NotExists;
- }
-
- // Existing entry.
-- e = m_pNode[0]->m_pData[i];
-+ e = m_pNode[0]->DataRepresentation ().m_pData[i];
- if (nMask1 != nMask2)
- {
- // Evaluate new attributes.
-@@ -743,7 +744,7 @@ storeError OStorePageManager::attrib (
- {
- // Set new attributes.
- e.m_nAttrib = nAttrib;
-- m_pNode[0]->m_pData[i] = e;
-+ m_pNode[0]->DataRepresentation ().m_pData[i] = e;
-
- // Save modified NodePage.
- node aNode (*m_pNode[0]);
-@@ -798,14 +799,14 @@ storeError OStorePageManager::link (
- }
-
- // Check for exact match.
-- if (!(e.compare (m_pNode[0]->m_pData[i]) == entry::COMPARE_EQUAL))
-+ if (!(e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]) == entry::COMPARE_EQUAL))
- {
- // Page not present.
- return store_E_NotExists;
- }
-
- // Existing entry. Check address.
-- e = m_pNode[0]->m_pData[i];
-+ e = m_pNode[0]->DataRepresentation ().m_pData[i];
- if (e.m_aLink.m_nAddr == STORE_PAGE_NULL)
- {
- // Page not present.
-@@ -826,7 +827,7 @@ storeError OStorePageManager::link (
- if (i < n)
- {
- // Compare entry.
-- entry::CompareResult result = e.compare (m_pNode[0]->m_pData[i]);
-+ entry::CompareResult result = e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]);
- OSL_POSTCOND(
- result != entry::COMPARE_LESS,
- "OStorePageManager::link(): find failed");
-@@ -878,7 +879,7 @@ storeError OStorePageManager::symlink (
-
- // Setup 'Source' page key.
- OStorePageKey aSrcKey;
-- eErrCode = OStorePageNameBlock::namei (pSrcPath, pSrcName, aSrcKey);
-+ eErrCode = OStorePageNameBlockA::namei (pSrcPath, pSrcName, aSrcKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-
-@@ -896,7 +897,7 @@ storeError OStorePageManager::symlink (
- if (i < n)
- {
- // Compare entry.
-- entry::CompareResult result = e.compare (m_pNode[0]->m_pData[i]);
-+ entry::CompareResult result = e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]);
- OSL_POSTCOND(
- result != entry::COMPARE_LESS,
- "OStorePageManager::symlink(): find failed");
-@@ -919,22 +920,20 @@ storeError OStorePageManager::symlink (
- if (m_pDirect)
- m_pDirect->initialize();
- if (!m_pDirect)
-- m_pDirect = new(m_nPageSize) inode(m_nPageSize);
-+ m_pDirect = new(m_nPageSize) inode(m_nPageSize, this);
- if (!m_pDirect)
- return store_E_OutOfMemory;
-
- // Setup as 'Source' directory page.
-- m_pDirect->m_aNameBlock.m_aKey = aSrcKey;
-- rtl_copyMemory (
-- &m_pDirect->m_aNameBlock.m_pData[0],
-- pSrcName->buffer, pSrcName->length);
-+ m_pDirect->NameBlock ().SetKey (aSrcKey);
-+ m_pDirect->NameBlock ().SetName (pSrcName, *this);
-
- // Store 'Destination' page key.
- OStorePageKey aDstKey (rDstKey);
- #ifdef OSL_BIGENDIAN
- aDstKey.swap(); // Swap to external representation.
- #endif /* OSL_BIGENDIAN */
-- rtl_copyMemory (&m_pDirect->m_pData[0], &aDstKey, sizeof(aDstKey));
-+ rtl_copyMemory (m_pDirect->Data (), &aDstKey, sizeof(aDstKey));
-
- // Mark 'Source' as symbolic link to 'Destination'.
- OStoreDirectoryPageObject aPage (*m_pDirect);
-@@ -981,7 +980,7 @@ storeError OStorePageManager::rename (
-
- // Setup 'Destination' page key.
- OStorePageKey aDstKey;
-- eErrCode = OStorePageNameBlock::namei (pDstPath, pDstName, aDstKey);
-+ eErrCode = OStorePageNameBlockA::namei (pDstPath, pDstName, aDstKey);
- if (eErrCode != store_E_None)
- return eErrCode;
-
-@@ -1003,14 +1002,14 @@ storeError OStorePageManager::rename (
- }
-
- // Check for exact match.
-- if (!(e.compare (m_pNode[0]->m_pData[i]) == entry::COMPARE_EQUAL))
-+ if (!(e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]) == entry::COMPARE_EQUAL))
- {
- // Page not present.
- return store_E_NotExists;
- }
-
- // Existing 'Source' entry. Check address.
-- e = m_pNode[0]->m_pData[i];
-+ e = m_pNode[0]->DataRepresentation ().m_pData[i];
- if (e.m_aLink.m_nAddr == STORE_PAGE_NULL)
- {
- // Page not present.
-@@ -1022,7 +1021,7 @@ storeError OStorePageManager::rename (
- {
- // Check directory page buffer.
- if (!m_pDirect)
-- m_pDirect = new(m_nPageSize) inode(m_nPageSize);
-+ m_pDirect = new(m_nPageSize) inode(m_nPageSize, this);
- if (!m_pDirect)
- return store_E_OutOfMemory;
-
-@@ -1055,7 +1054,7 @@ storeError OStorePageManager::rename (
- if (i < n)
- {
- // Compare entry.
-- entry::CompareResult result = e.compare (m_pNode[0]->m_pData[i]);
-+ entry::CompareResult result = e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]);
- OSL_POSTCOND(
- result != entry::COMPARE_LESS,
- "OStorePageManager::rename(): find failed");
-@@ -1086,14 +1085,8 @@ storeError OStorePageManager::rename (
- if (!(e.m_nAttrib & STORE_ATTRIB_ISLINK))
- {
- // Setup 'Destination' NameBlock.
-- sal_Int32 nDstLen = pDstName->length;
-- rtl_copyMemory (
-- &m_pDirect->m_aNameBlock.m_pData[0],
-- pDstName->buffer, nDstLen);
-- rtl_zeroMemory (
-- &m_pDirect->m_aNameBlock.m_pData[nDstLen],
-- STORE_MAXIMUM_NAMESIZE - nDstLen);
-- m_pDirect->m_aNameBlock.m_aKey = e.m_aKey;
-+ m_pDirect->NameBlock ().SetName (pDstName, *this);
-+ m_pDirect->NameBlock ().SetKey (e.m_aKey);
-
- // Save directory page.
- OStoreDirectoryPageObject aPage (*m_pDirect);
-@@ -1143,14 +1136,14 @@ storeError OStorePageManager::remove (co
- }
-
- // Check for exact match.
-- if (!(e.compare (m_pNode[0]->m_pData[i]) == entry::COMPARE_EQUAL))
-+ if (!(e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]) == entry::COMPARE_EQUAL))
- {
- // Page not present.
- return store_E_NotExists;
- }
-
- // Existing entry. Check address.
-- e = m_pNode[0]->m_pData[i];
-+ e = m_pNode[0]->DataRepresentation ().m_pData[i];
- if (e.m_aLink.m_nAddr == STORE_PAGE_NULL)
- {
- // Page not present.
-@@ -1162,7 +1155,7 @@ storeError OStorePageManager::remove (co
- {
- // Check directory page buffer.
- if (!m_pDirect)
-- m_pDirect = new(m_nPageSize) inode(m_nPageSize);
-+ m_pDirect = new(m_nPageSize) inode(m_nPageSize, this);
- if (!m_pDirect)
- return store_E_OutOfMemory;
-
-@@ -1175,7 +1168,7 @@ storeError OStorePageManager::remove (co
- return eErrCode;
-
- // Acquire page write access.
-- OStorePageDescriptor aDescr (m_pDirect->m_aDescr);
-+ OStorePageDescriptor aDescr (m_pDirect->PageHeader ().m_aDescr);
- eErrCode = base::acquirePage (aDescr, store_AccessReadWrite);
- if (eErrCode != store_E_None)
- return eErrCode;
-@@ -1202,7 +1195,7 @@ storeError OStorePageManager::remove (co
- }
-
- // Truncate internal data page.
-- rtl_zeroMemory (&m_pDirect->m_pData[0], m_pDirect->capacity());
-+ rtl_zeroMemory (m_pDirect->Data (), m_pDirect->capacity());
- aPage.dataLength (0);
- }
-
-@@ -1252,7 +1245,7 @@ storeError OStorePageManager::iterate (
- }
-
- // Compare entry.
-- entry::CompareResult result = e.compare (m_pNode[0]->m_pData[i]);
-+ entry::CompareResult result = e.compare (m_pNode[0]->DataRepresentation ().m_pData[i]);
- OSL_POSTCOND(
- result != entry::COMPARE_LESS,
- "OStorePageManager::iterate(): find failed");
-@@ -1265,7 +1258,7 @@ storeError OStorePageManager::iterate (
- }
-
- // GreaterEqual. Found next entry.
-- e = m_pNode[0]->m_pData[i];
-+ e = m_pNode[0]->DataRepresentation ().m_pData[i];
-
- // Setup result.
- rKey = e.m_aKey;
-@@ -1359,20 +1352,20 @@ storeError OStorePageManager::rebuild (
- return eErrCode;
-
- // Initialize as 'Destination' with 'Source' page size.
-- eErrCode = self::initializeManager (pDstLB, store_AccessCreate, nPageSize);
-+ eErrCode = self::initializeManager (pDstLB, store_AccessCreate, nPageSize, version ());
- if (eErrCode != store_E_None)
- return eErrCode;
-
- // Initialize directory and data page buffers.
- if (!m_pDirect)
-- m_pDirect = new(m_nPageSize) inode(m_nPageSize);
-+ m_pDirect = new(m_nPageSize) inode(m_nPageSize, this);
- if (!m_pData)
- m_pData = new(m_nPageSize) data(m_nPageSize);
- if (!(m_pDirect && m_pData))
- return store_E_OutOfMemory;
-
- // Initialize 'Source' directory page.
-- inode *pDirect = new(m_nPageSize) inode(m_nPageSize);
-+ inode *pDirect = new(m_nPageSize) inode(m_nPageSize, this);
- if (!pDirect)
- return store_E_OutOfMemory;
-
-@@ -1381,8 +1374,8 @@ storeError OStorePageManager::rebuild (
- while ((eErrCode = aCtx.load(aSrcPage)) == store_E_None)
- {
- // Obtain page key and data length.
-- OStorePageKey aKey (pDirect->m_aNameBlock.m_aKey);
-- sal_uInt32 nDataLen = pDirect->m_aDataBlock.m_nDataLen;
-+ OStorePageKey aKey (pDirect->NameBlock ().Key ());
-+ sal_uInt32 nDataLen = pDirect->DataBlock ().DataLen ();
-
- // Determine data page scope.
- inode::ChunkScope eScope = pDirect->scope (nDataLen);
-@@ -1399,8 +1392,8 @@ storeError OStorePageManager::rebuild (
- OStoreDirectoryPageObject aDstPage (*m_pDirect);
- rtl_copyMemory (m_pDirect, pDirect, m_nPageSize);
-
-- m_pDirect->m_aDataBlock.initialize();
-- m_pDirect->m_aDataBlock.m_nDataLen = m_pDirect->capacity();
-+ m_pDirect->DataBlock ().initialize();
-+ m_pDirect->DataBlock ().SetDataLen (m_pDirect->capacity());
-
- // Insert 'Destination' directory page.
- eErrCode = save (aKey, aDstPage);
-@@ -1419,7 +1412,7 @@ storeError OStorePageManager::rebuild (
- for (i = 0; i < n; i++)
- {
- // Re-initialize data page size.
-- m_pData->m_aDescr.m_nSize = m_nPageSize;
-+ m_pData->PageHeader ().m_aDescr.m_nSize = m_nPageSize;
-
- // Read 'Source' data page.
- OStorePageBIOS &rBIOS = *(aCtx.m_xBIOS);
-@@ -1438,7 +1431,7 @@ storeError OStorePageManager::rebuild (
- }
-
- // Update 'Destination' directory page.
-- m_pDirect->m_aDataBlock.m_nDataLen = nDataLen;
-+ m_pDirect->DataBlock ().SetDataLen (nDataLen);
- eErrCode = base::save (aDstPage);
- }
- }
-@@ -1460,17 +1453,17 @@ storeError OStorePageManager::rebuild (
- sal_uInt16 i, n = pNode->usageCount();
- for (i = 0; i < n; i++)
- {
-- e = pNode->m_pData[i];
-+ e = pNode->DataRepresentation ().m_pData[i];
- if (e.m_nAttrib & STORE_ATTRIB_ISLINK)
- {
- // Hard link.
- aSrcPage.location (e.m_aLink.m_nAddr);
-- pDirect->m_aDescr.m_nSize = m_nPageSize;
-+ pDirect->PageHeader ().m_aDescr.m_nSize = m_nPageSize;
-
- eErrCode = aCtx.m_xBIOS->load (aSrcPage);
- if (eErrCode == store_E_None)
- {
-- OStorePageKey aDstKey (pDirect->m_aNameBlock.m_aKey);
-+ OStorePageKey aDstKey (pDirect->NameBlock ().Key ());
- eErrCode = link (e.m_aKey, aDstKey);
- }
- e.m_nAttrib &= ~STORE_ATTRIB_ISLINK;
---- store/source/storpage.hxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/storpage.hxx 2009-04-06 16:42:11.000000000 +0000
-@@ -66,7 +66,8 @@ public:
- storeError initializeManager (
- ILockBytes *pLockBytes,
- storeAccessMode eAccessMode,
-- sal_uInt16 nPageSize);
-+ sal_uInt16 nPageSize,
-+ sal_uInt16 nFormatVersion);
-
- /** isValid.
- * @return sal_True upon successful initialization,
---- store/source/stortree.cxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/stortree.cxx 2009-04-06 16:42:11.000000000 +0000
-@@ -55,7 +55,7 @@ using namespace store;
- * OStoreBTreeNodeData.
- */
- OStoreBTreeNodeData::OStoreBTreeNodeData (sal_uInt16 nPageSize)
-- : OStorePageData (nPageSize)
-+ : OStorePageData (nPageSize, sizeof (self))
- {
- initialize();
- }
-@@ -65,15 +65,15 @@ OStoreBTreeNodeData::OStoreBTreeNodeData
- */
- void OStoreBTreeNodeData::initialize (void)
- {
-- base::m_aGuard.m_nMagic = STORE_MAGIC_BTREENODE;
-- base::m_aDescr.m_nUsed = base::size() + self::size();
-- self::m_aGuard.m_nMagic = 0;
-+ base::PageHeader ().m_aGuard.m_nMagic = STORE_MAGIC_BTREENODE;
-+ base::PageHeader ().m_aDescr.m_nUsed = base::size() + self::size();
-+ self::PageHeader ().m_aGuard.m_nMagic = 0;
-
- sal_uInt16 i, n = capacityCount();
- T t;
-
- for (i = 1; i < n; i++)
-- m_pData[i] = t;
-+ DataRepresentation ().m_pData[i] = t;
- }
-
- /*
-@@ -87,11 +87,11 @@ void OStoreBTreeNodeData::swap (
- )
- {
- #ifdef OSL_BIGENDIAN
-- m_aGuard.swap();
-+ DataRepresentation ().m_aGuard.swap();
-
- sal_uInt16 i, n = sal_uInt16(capacity(rDescr) / sizeof(T));
- for (i = 0; i < n; i++)
-- m_pData[i].swap();
-+ DataRepresentation ().m_pData[i].swap();
- #endif /* OSL_BIGENDIAN */
- }
-
-@@ -107,16 +107,16 @@ sal_uInt16 OStoreBTreeNodeData::find (co
- {
- register sal_Int32 m = ((l + r) >> 1);
-
-- if (t.m_aKey == m_pData[m].m_aKey)
-+ if (t.m_aKey == DataRepresentation ().m_pData[m].m_aKey)
- return ((sal_uInt16)(m));
-- if (t.m_aKey < m_pData[m].m_aKey)
-+ if (t.m_aKey < DataRepresentation ().m_pData[m].m_aKey)
- r = m - 1;
- else
- l = m + 1;
- }
-
- sal_uInt16 k = ((sal_uInt16)(r));
-- if ((k < capacityCount()) && (t.m_aKey < m_pData[k].m_aKey))
-+ if ((k < capacityCount()) && (t.m_aKey < DataRepresentation ().m_pData[k].m_aKey))
- return(k - 1);
- else
- return(k);
-@@ -132,11 +132,11 @@ void OStoreBTreeNodeData::insert (sal_uI
- if ((n < m) && (i < m))
- {
- // shift right.
-- rtl_moveMemory (&m_pData[i + 1], &m_pData[i], (n - i) * sizeof(T));
-+ rtl_moveMemory (&DataRepresentation ().m_pData[i + 1], &DataRepresentation ().m_pData[i], (n - i) * sizeof(T));
-
- // insert.
-- m_pData[i] = t;
-- base::m_aDescr.m_nUsed += sal_uInt16(sizeof(T));
-+ DataRepresentation ().m_pData[i] = t;
-+ base::PageHeader ().m_aDescr.m_nUsed += sal_uInt16(sizeof(T));
- }
- }
-
-@@ -150,11 +150,11 @@ void OStoreBTreeNodeData::remove (sal_uI
- {
- // shift left.
- rtl_moveMemory (
-- &m_pData[i], &m_pData[i + 1], (n - i - 1) * sizeof(T));
-+ &DataRepresentation ().m_pData[i], &DataRepresentation ().m_pData[i + 1], (n - i - 1) * sizeof(T));
-
- // truncate.
-- m_pData[n - 1] = T();
-- base::m_aDescr.m_nUsed -= sal_uInt16(sizeof(T));
-+ DataRepresentation ().m_pData[n - 1] = T();
-+ base::PageHeader ().m_aDescr.m_nUsed -= sal_uInt16(sizeof(T));
- }
- }
-
-@@ -167,7 +167,7 @@ void OStoreBTreeNodeData::merge (const s
- {
- sal_uInt16 n = usageCount();
- sal_uInt16 m = rPageR.usageCount();
-- rtl_copyMemory (&m_pData[n], &rPageR.m_pData[0], m * sizeof(T));
-+ rtl_copyMemory (&DataRepresentation ().m_pData[n], &rPageR.DataRepresentation ().m_pData[0], m * sizeof(T));
- usageCount (n + m);
- }
- }
-@@ -178,7 +178,7 @@ void OStoreBTreeNodeData::merge (const s
- void OStoreBTreeNodeData::split (const self& rPageL)
- {
- sal_uInt16 h = capacityCount() / 2;
-- rtl_copyMemory (&m_pData[0], &rPageL.m_pData[h], h * sizeof(T));
-+ rtl_copyMemory (&DataRepresentation ().m_pData[0], &rPageL.DataRepresentation ().m_pData[h], h * sizeof(T));
- truncate (h);
- }
-
-@@ -191,7 +191,7 @@ void OStoreBTreeNodeData::truncate (sal_
- T t;
-
- for (sal_uInt16 i = n; i < m; i++)
-- m_pData[i] = t;
-+ DataRepresentation ().m_pData[i] = t;
- usageCount (n);
- }
-
-@@ -255,7 +255,7 @@ storeError OStoreBTreeNodeObject::split
- STORE_METHOD_ENTER(pMutex);
-
- // Save PageDescriptor.
-- D aDescr (m_rPage.m_aDescr);
-+ D aDescr (m_rPage.PageHeader ().m_aDescr);
-
- // Acquire Lock.
- storeError eErrCode = rBIOS.acquireLock (aDescr.m_nAddr, aDescr.m_nSize);
-@@ -297,7 +297,7 @@ storeError OStoreBTreeNodeObject::split
-
- // Insert right page.
- T entry;
-- entry.m_aKey = rPageR.m_pData[0].m_aKey;
-+ entry.m_aKey = rPageR.DataRepresentation ().m_pData[0].m_aKey;
- entry.m_aLink.m_nAddr = rPageR.location();
-
- m_rPage.insert (nIndexL + 1, entry);
-@@ -340,7 +340,7 @@ storeError OStoreBTreeNodeObject::remove
- STORE_METHOD_ENTER(pMutex);
-
- // Save PageDescriptor.
-- D aDescr (m_rPage.m_aDescr);
-+ D aDescr (m_rPage.PageHeader ().m_aDescr);
-
- // Acquire Lock.
- storeError eErrCode = rBIOS.acquireLock (aDescr.m_nAddr, aDescr.m_nSize);
-@@ -351,7 +351,7 @@ storeError OStoreBTreeNodeObject::remove
- if (m_rPage.depth())
- {
- // Check link entry.
-- if (!(rEntryL.compare (m_rPage.m_pData[nIndexL]) == T::COMPARE_EQUAL))
-+ if (!(rEntryL.compare (m_rPage.DataRepresentation ().m_pData[nIndexL]) == T::COMPARE_EQUAL))
- {
- rBIOS.releaseLock (aDescr.m_nAddr, aDescr.m_nSize);
- STORE_METHOD_LEAVE(pMutex, store_E_InvalidAccess);
-@@ -359,7 +359,7 @@ storeError OStoreBTreeNodeObject::remove
-
- // Load link node.
- self aNodeL (rPageL);
-- aNodeL.location (m_rPage.m_pData[nIndexL].m_aLink.m_nAddr);
-+ aNodeL.location (m_rPage.DataRepresentation ().m_pData[nIndexL].m_aLink.m_nAddr);
-
- eErrCode = rBIOS.load (aNodeL);
- if (eErrCode != store_E_None)
-@@ -429,21 +429,21 @@ storeError OStoreBTreeNodeObject::remove
- #endif /* NYI */
-
- // Relink.
-- m_rPage.m_pData[nIndexL].m_aKey = rPageL.m_pData[0].m_aKey;
-+ m_rPage.DataRepresentation ().m_pData[nIndexL].m_aKey = rPageL.DataRepresentation ().m_pData[0].m_aKey;
- touch();
- }
- }
- else
- {
- // Check leaf entry.
-- if (!(rEntryL.compare (m_rPage.m_pData[nIndexL]) == T::COMPARE_EQUAL))
-+ if (!(rEntryL.compare (m_rPage.DataRepresentation ().m_pData[nIndexL]) == T::COMPARE_EQUAL))
- {
- rBIOS.releaseLock (aDescr.m_nAddr, aDescr.m_nSize);
- STORE_METHOD_LEAVE(pMutex, store_E_NotExists);
- }
-
- // Save leaf entry.
-- rEntryL = m_rPage.m_pData[nIndexL];
-+ rEntryL = m_rPage.DataRepresentation ().m_pData[nIndexL];
-
- // Remove leaf index.
- m_rPage.remove (nIndexL);
-@@ -488,7 +488,7 @@ storeError OStoreBTreeRootObject::change
- STORE_METHOD_ENTER(pMutex);
-
- // Save PageDescriptor.
-- OStorePageDescriptor aDescr (m_rPage.m_aDescr);
-+ OStorePageDescriptor aDescr (m_rPage.PageHeader ().m_aDescr);
-
- // Acquire Lock.
- storeError eErrCode = rBIOS.acquireLock (aDescr.m_nAddr, aDescr.m_nSize);
-@@ -507,8 +507,8 @@ storeError OStoreBTreeRootObject::change
- STORE_METHOD_LEAVE(pMutex, eErrCode);
- }
-
-- m_rPage.m_pData[0].m_aKey = rPageL.m_pData[0].m_aKey;
-- m_rPage.m_pData[0].m_aLink.m_nAddr = rPageL.location();
-+ m_rPage.DataRepresentation ().m_pData[0].m_aKey = rPageL.DataRepresentation ().m_pData[0].m_aKey;
-+ m_rPage.DataRepresentation ().m_pData[0].m_aLink.m_nAddr = rPageL.location();
-
- m_rPage.truncate (1);
- m_rPage.depth (m_rPage.depth() + 1);
---- store/source/stortree.hxx.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/source/stortree.hxx 2009-04-06 16:42:11.000000000 +0000
-@@ -128,8 +128,15 @@ struct OStoreBTreeNodeData : public stor
-
- /** Representation.
- */
-- G m_aGuard;
-- T m_pData[1];
-+ struct Representation {
-+ G m_aGuard;
-+ T m_pData[1];
-+ };
-+
-+ inline Representation& DataRepresentation () const
-+ {
-+ return *(Representation *) (Data () + base::size ());
-+ }
-
- /** size.
- */
-@@ -146,7 +153,7 @@ struct OStoreBTreeNodeData : public stor
- }
- sal_uInt16 capacity (void) const
- {
-- return self::capacity (base::m_aDescr);
-+ return self::capacity (base::PageHeader ().m_aDescr);
- }
-
- /** capacityCount (must be even).
-@@ -164,7 +171,7 @@ struct OStoreBTreeNodeData : public stor
- }
- sal_uInt16 usage (void) const
- {
-- return self::usage (base::m_aDescr);
-+ return self::usage (base::PageHeader ().m_aDescr);
- }
-
- /** usageCount.
-@@ -175,7 +182,7 @@ struct OStoreBTreeNodeData : public stor
- }
- void usageCount (sal_uInt16 nCount)
- {
-- base::m_aDescr.m_nUsed = base::size() + self::size() +
-+ base::PageHeader ().m_aDescr.m_nUsed = base::size() + self::size() +
- sal_uInt16(nCount * sizeof(T));
- }
-
-@@ -190,8 +197,8 @@ struct OStoreBTreeNodeData : public stor
- {
- base::operator= (rOther);
-
-- m_aGuard = rOther.m_aGuard;
-- rtl_copyMemory (m_pData, rOther.m_pData, capacity());
-+ DataRepresentation ().m_aGuard = rOther.DataRepresentation ().m_aGuard;
-+ rtl_copyMemory (DataRepresentation ().m_pData, rOther.DataRepresentation ().m_pData, capacity());
- }
- return *this;
- }
-@@ -200,7 +207,7 @@ struct OStoreBTreeNodeData : public stor
- */
- sal_Bool operator== (const self& rOther) const
- {
-- return (base::operator==(rOther) && (m_aGuard == rOther.m_aGuard));
-+ return (base::operator==(rOther) && (DataRepresentation ().m_aGuard == rOther.DataRepresentation ().m_aGuard));
- }
-
- /** swap (external and internal representation).
-@@ -212,12 +219,12 @@ struct OStoreBTreeNodeData : public stor
- void guard (const D& rDescr)
- {
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, m_pData, capacity(rDescr));
-+ nCRC32 = G::crc32 (nCRC32, &DataRepresentation ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, DataRepresentation ().m_pData, capacity(rDescr));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- m_aGuard.m_nCRC32 = nCRC32;
-+ DataRepresentation ().m_aGuard.m_nCRC32 = nCRC32;
- }
-
- /** verify (external representation).
-@@ -225,12 +232,12 @@ struct OStoreBTreeNodeData : public stor
- storeError verify (const D& rDescr)
- {
- sal_uInt32 nCRC32 = 0;
-- nCRC32 = G::crc32 (nCRC32, &m_aGuard.m_nMagic, sizeof(sal_uInt32));
-- nCRC32 = G::crc32 (nCRC32, m_pData, capacity(rDescr));
-+ nCRC32 = G::crc32 (nCRC32, &DataRepresentation ().m_aGuard.m_nMagic, sizeof(sal_uInt32));
-+ nCRC32 = G::crc32 (nCRC32, DataRepresentation ().m_pData, capacity(rDescr));
- #ifdef OSL_BIGENDIAN
- nCRC32 = OSL_SWAPDWORD(nCRC32);
- #endif /* OSL_BIGENDIAN */
-- if (m_aGuard.m_nCRC32 != nCRC32)
-+ if (DataRepresentation ().m_aGuard.m_nCRC32 != nCRC32)
- return store_E_InvalidChecksum;
- else
- return store_E_None;
-@@ -240,11 +247,11 @@ struct OStoreBTreeNodeData : public stor
- */
- sal_uInt32 depth (void) const
- {
-- return self::m_aGuard.m_nMagic;
-+ return self::DataRepresentation ().m_aGuard.m_nMagic;
- }
- void depth (sal_uInt32 nDepth)
- {
-- self::m_aGuard.m_nMagic = nDepth;
-+ self::DataRepresentation ().m_aGuard.m_nMagic = nDepth;
- }
-
- /** queryMerge.
---- store/workben/makefile.mk.old 2009-04-02 10:44:48.000000000 +0000
-+++ store/workben/makefile.mk 2009-04-06 16:42:11.000000000 +0000
-@@ -62,12 +62,14 @@ CFLAGS+= -I..$/source
- CXXFILES= \
- t_file.cxx \
- t_base.cxx \
-- t_store.cxx
-+ t_store.cxx \
-+ t_shell.cxx
-
- OBJFILES= \
- $(OBJ)$/t_file.obj \
- $(OBJ)$/t_base.obj \
-- $(OBJ)$/t_store.obj
-+ $(OBJ)$/t_store.obj \
-+ $(OBJ)$/t_shell.obj
-
- APP1TARGET= t_file
- APP1OBJS= $(OBJ)$/t_file.obj
-@@ -93,6 +95,14 @@ APP3DEPN= \
- $(SLB)$/store.lib \
- $(L)$/isal.lib
-
-+APP4TARGET= t_shell
-+APP4OBJS= $(OBJ)$/t_shell.obj
-+APP4STDLIBS= $(STORELIB)
-+APP4STDLIBS+= $(SALLIB)
-+APP4DEPN= \
-+ $(SLB)$/store.lib \
-+ $(L)$/isal.lib
-+
- # --- Targets ---
-
- .INCLUDE : target.mk
diff --git a/patches/dev300/store-crash-fix.diff b/patches/dev300/store-crash-fix.diff
new file mode 100644
index 0000000..52996ae
--- /dev/null
+++ b/patches/dev300/store-crash-fix.diff
@@ -0,0 +1,24 @@
+Fix the store prob with missing magic the most simple way
+
+From: Thorsten Behrens <thb at openoffice.org>
+
+
+---
+
+ store/source/storbase.hxx | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+
+diff --git store/source/storbase.hxx store/source/storbase.hxx
+index ac75138..7d91545 100644
+--- store/source/storbase.hxx
++++ store/source/storbase.hxx
+@@ -701,7 +701,7 @@ class PageHolderObject
+ template< class U >
+ static bool isA (PageData const * p)
+ {
+- return ((p != 0) && (p->type() == U::theTypeId));
++ return p != 0;
+ }
+
+ template< class U >
diff --git a/patches/dev300/store-install.diff b/patches/dev300/store-install.diff
deleted file mode 100644
index 5427f29..0000000
--- a/patches/dev300/store-install.diff
+++ /dev/null
@@ -1,103 +0,0 @@
---- offapi/util/makefile.mk.old 2009-04-06 16:41:42.000000000 +0000
-+++ offapi/util/makefile.mk 2009-04-06 16:42:11.000000000 +0000
-@@ -155,6 +155,8 @@ UNOTYPE_STATISTICS=$(MISC)$/unotype_stat
-
- # --- Targets ------------------------------------------------------
-
-+REGMERGEFLAGS=-i
-+
- ALLTAR : $(UCR)$/types.db \
- $(OUT)$/ucrdoc$/types_doc.db \
- $(REGISTRYCHECKFLAG) \
-@@ -163,7 +165,7 @@ ALLTAR : $(UCR)$/types.db \
- $(UCR)$/types.db : $(UCR)$/offapi.db $(SOLARBINDIR)$/udkapi.rdb
- -$(RM) $(REGISTRYCHECKFLAG)
- $(GNUCOPY) -f $(UCR)$/offapi.db $@
-- $(REGMERGE) $@ / $(SOLARBINDIR)$/udkapi.rdb
-+ $(REGMERGE) $(REGMERGEFLAGS) $@ / $(SOLARBINDIR)$/udkapi.rdb
-
- $(OUT)$/ucrdoc$/types_doc.db : $(OUT)$/ucrdoc$/offapi_doc.db $(SOLARBINDIR)$/udkapi_doc.rdb
- -$(RM) $(REGISTRYCHECKFLAG)
---- solenv/bin/modules/installer/servicesfile.pm.old 2009-04-02 10:53:08.000000000 +0000
-+++ solenv/bin/modules/installer/servicesfile.pm 2009-04-06 16:42:11.000000000 +0000
-@@ -948,6 +948,11 @@ sub create_services_rdb
- $regcompfileref = get_source_path_cygwin_safe($searchname, $includepatharrayref, 1);
- if ( $$regcompfileref eq "" ) { installer::exiter::exit_program("ERROR: Could not find file $searchname for registering uno components!", "create_services_rdb"); }
-
-+ if ($installer::globals::isunix) { $searchname = "regmerge"; }
-+ else { $searchname = "regmerge.exe"; }
-+
-+ $regmergefileref = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$searchname, $includepatharrayref, 1);
-+ if ( $$regmergefileref eq "" ) { installer::exiter::exit_program("ERROR: Could not find file $searchname for registering uno components!", "create_services_rdb"); }
- # For Windows the libraries included into the mozruntime.zip have to be added to the path
- if ($installer::globals::iswin) { add_path_to_pathvariable_directory($filesarrayref, "mozruntime_zip"); }
- if ($installer::globals::iswin) { add_path_to_pathvariable($filesarrayref, "msvcr70.dll"); }
-@@ -991,6 +996,8 @@ sub create_services_rdb
- }
- else
- {
-+ system ("$installer::globals::wrapcmd $$regmergefileref -i " . fix_cygwin_path ("${servicesfile}.internal") . " / " . fix_cygwin_path (${servicesfile}));
-+ installer::systemactions::rename_one_file ("${servicesfile}.internal", ${servicesfile});
- $servicesdir = installer::systemactions::rename_directory($servicesdir, $origservicesdir);
- }
-
---- solenv/inc/target.mk.old 2009-04-06 16:41:40.000000000 +0000
-+++ solenv/inc/target.mk 2009-04-06 16:42:11.000000000 +0000
-@@ -1402,31 +1402,31 @@ makedoc:
- $(LOCALDBTARGET) : $(URDFILES) $(DEPIDLFILES)
- $(QUIET_BUILD) $(IDLC) @$(mktmp $(IDLCFLAGS) $(UNOIDLDEFS) $(UNOIDLINCEXTRA) $(UNOIDLINC) -O$(OUT)$/ucr$/$(IDLPACKAGE) $(all_outdated_idl))
- @-$(RM) $@
-- $(QUIET_BUILD) $(REGMERGE) $@ UCR @$(mktmp $(URDFILES))
-+ $(QUIET_BUILD) $(REGMERGE) $(REGMERGEFLAGS) $@ UCR @$(mktmp $(URDFILES))
- .ENDIF
-
- .IF "$(LOCALDOCDBTARGET)"!=""
- $(LOCALDOCDBTARGET) : $(URDDOCFILES) $(DEPIDLFILES)
- $(QUIET_BUILD) $(IDLC) @$(mktmp $(IDLCFLAGS) $(UNOIDLDEFS) $(UNOIDLINCEXTRA) $(UNOIDLINC) -C -O$(OUT)$/ucrdoc$/$(IDLPACKAGE) $(all_outdated_idl))
- @-$(RM) $@
-- $(QUIET_BUILD) $(REGMERGE) $@ UCR @$(mktmp $(URDDOCFILES))
-+ $(QUIET_BUILD) $(REGMERGE) $(REGMERGEFLAGS) $@ UCR @$(mktmp $(URDDOCFILES))
- .ENDIF
-
- .IF "$(UNOIDLDBTARGET)"!=""
- $(UNOIDLDBTARGET) : $(UNOIDLDBFILES) $(UNOIDLDBREGS)
- @-$(RM) $@
-- $(QUIET_BUILD) $(REGMERGE) $@ / @$(mktmp $(UNOIDLDBFILES) $(UNOIDLDBREGS))
-+ $(QUIET_BUILD) $(REGMERGE) $(REGMERGEFLAGS) $@ / @$(mktmp $(UNOIDLDBFILES) $(UNOIDLDBREGS))
- .IF "$(LOCALREGDB)"!=""
-- $(QUIET_BUILD) $(REGMERGE) $(LOCALREGDB) / $@
-+ $(QUIET_BUILD) $(REGMERGE) $(REGMERGEFLAGS) $(LOCALREGDB) / $@
- .ENDIF
- .ENDIF # "$(UNOIDLDBTARGET)"!=""
-
- .IF "$(UNOIDLDBDOCTARGET)"!=""
- $(UNOIDLDBDOCTARGET) : $(UNOIDLDBDOCFILES) $(UNOIDLDBDOCREGS)
- @-$(RM) $@
-- $(QUIET_BUILD) $(REGMERGE) $@ / @$(mktmp $(UNOIDLDBDOCFILES) $(UNOIDLDBDOCREGS))
-+ $(QUIET_BUILD) $(REGMERGE) $(REGMERGEFLAGS) $@ / @$(mktmp $(UNOIDLDBDOCFILES) $(UNOIDLDBDOCREGS))
- .IF "$(LOCALREGDB)"!=""
-- $(QUIET_BUILD) $(REGMERGE) $(LOCALREGDB) / $@
-+ $(QUIET_BUILD) $(REGMERGE) $(REGMERGEFLAGS) $(LOCALREGDB) / $@
- .ENDIF
- .ENDIF # "$(UNOIDLDBDOCTARGET)"!=""
-
---- oovbaapi/util/makefile.mk.old 2009-04-06 16:42:01.000000000 +0000
-+++ oovbaapi/util/makefile.mk 2009-04-06 16:42:11.000000000 +0000
-@@ -49,5 +49,5 @@ UNOIDLDBFILES= \
- $(UCR)$/constants.db
-
- # --- Targets ------------------------------------------------------
--
-+REGMERGEFLAGS=-i
- .INCLUDE : target.mk
---- udkapi/util/makefile.mk.old 2009-04-02 11:06:56.000000000 +0000
-+++ udkapi/util/makefile.mk 2009-04-06 16:42:11.000000000 +0000
-@@ -72,6 +72,8 @@ UNOIDLDBFILES= \
- $(UCR)$/csstask.db \
- $(UCR)$/cssuri.db
-
-+REGMERGEFLAGS=-i
-+
- # --- Targets ------------------------------------------------------
-
- .INCLUDE : target.mk
diff --git a/patches/dev300/store-registry.diff b/patches/dev300/store-registry.diff
deleted file mode 100644
index f5ad173..0000000
--- a/patches/dev300/store-registry.diff
+++ /dev/null
@@ -1,174 +0,0 @@
---- ./registry/inc/registry/registry.h.store-registry~ 2008-07-07 21:53:26.583846279 +0200
-+++ ./registry/inc/registry/registry.h 2008-07-07 22:05:39.641847088 +0200
-@@ -410,7 +410,7 @@ RegError REGISTRY_CALLTYPE reg_mergeKey(
- @return REG_NO_ERROR if succeeds else an error code.
- */
- RegError REGISTRY_CALLTYPE reg_createRegistry(rtl_uString* registryName,
-- RegHandle* phRegistry);
-+ RegHandle* phRegistry, bool bInternal = false);
-
-
- /** This function opens the root key of a registry.
---- ./registry/source/regimpl.cxx.store-registry~ 2008-07-07 21:53:24.154848251 +0200
-+++ ./registry/source/regimpl.cxx 2008-07-07 22:04:50.955847680 +0200
-@@ -483,7 +483,7 @@ ORegistry::~ORegistry()
- //*********************************************************************
- // initRegistry
- //
--RegError ORegistry::initRegistry(const OUString& regName, RegAccessMode accessMode)
-+RegError ORegistry::initRegistry(const OUString& regName, RegAccessMode accessMode, bool bInternal)
- {
- OStoreFile rRegFile;
- storeAccessMode sAccessMode = REG_MODE_OPEN;
-@@ -506,7 +506,10 @@ RegError ORegistry::initRegistry(const O
- }
- else
- {
-- errCode = rRegFile.create(regName, sAccessMode, REG_PAGESIZE);
-+ if (bInternal)
-+ errCode = rRegFile.create(regName, sAccessMode, REG_PAGESIZE_INTERNAL, REG_RDB_FORMAT_2);
-+ else
-+ errCode = rRegFile.create(regName, sAccessMode, REG_PAGESIZE_PUBLIC, REG_RDB_FORMAT_1);
- }
-
- if (errCode)
---- ./registry/source/regimpl.hxx.store-registry~ 2008-04-11 12:50:09.000000000 +0200
-+++ ./registry/source/regimpl.hxx 2008-07-07 22:04:50.957847096 +0200
-@@ -36,7 +36,11 @@
- #include <osl/mutex.hxx>
- #include <store/store.hxx>
-
--#define REG_PAGESIZE 512
-+#define REG_PAGESIZE_PUBLIC 512
-+#define REG_PAGESIZE_INTERNAL 128
-+
-+#define REG_RDB_FORMAT_1 STORE_FORMAT_V1
-+#define REG_RDB_FORMAT_2 STORE_FORMAT_V2
-
- #define REG_MODE_CREATE store_AccessCreate
- #define REG_MODE_OPEN store_AccessReadWrite
-@@ -93,7 +97,8 @@ public:
- { return --m_refCount; }
-
- RegError initRegistry(const OUString& name,
-- RegAccessMode accessMode);
-+ RegAccessMode accessMode,
-+ bool bInternal = false);
-
- RegError closeRegistry();
-
---- ./registry/source/registry.cxx.store-registry~ 2008-04-11 12:50:37.000000000 +0200
-+++ ./registry/source/registry.cxx 2008-07-07 22:04:50.959846582 +0200
-@@ -637,12 +637,13 @@ RegError REGISTRY_CALLTYPE reg_mergeKey(
- // reg_createRegistry
- //
- RegError REGISTRY_CALLTYPE reg_createRegistry(rtl_uString* registryName,
-- RegHandle* phRegistry)
-+ RegHandle* phRegistry,
-+ bool bInternal)
- {
- RegError ret;
-
- ORegistry* pReg = new ORegistry();
-- if ((ret = pReg->initRegistry(registryName, REG_CREATE)))
-+ if ((ret = pReg->initRegistry(registryName, REG_CREATE, bInternal)))
- {
- *phRegistry = NULL;
- return ret;
---- ./registry/tools/regmerge.cxx.store-registry~ 2008-04-11 12:58:26.000000000 +0200
-+++ ./registry/tools/regmerge.cxx 2008-07-07 22:04:50.962846684 +0200
-@@ -98,15 +98,16 @@ static void dumpHelp()
- {
- fprintf(stderr, "using: regmerge [-v|--verbose] mergefile mergeKeyName regfile_1 ... regfile_n\n");
- fprintf(stderr, " regmerge @regcmds\nOptions:\n");
-- fprintf(stderr, " -v, --verbose : verbose output on stdout.\n");
-- fprintf(stderr, " mergefile : specifies the merged registry file. If this file doesn't exists,\n");
-- fprintf(stderr, " it is created.\n");
-- fprintf(stderr, " mergeKeyName : specifies the merge key, everything is merged under this key.\n");
-- fprintf(stderr, " If this key doesn't exists, it is created.\n");
-- fprintf(stderr, " regfile_1..n : specifies one or more registry files which are merged.\n");
-+ fprintf(stderr, " -i, --internal : use internal private format.\n");
-+ fprintf(stderr, " -v, --verbose : verbose output on stdout.\n");
-+ fprintf(stderr, " mergefile : specifies the merged registry file. If this file doesn't exists,\n");
-+ fprintf(stderr, " it is created.\n");
-+ fprintf(stderr, " mergeKeyName : specifies the merge key, everything is merged under this key.\n");
-+ fprintf(stderr, " If this key doesn't exists, it is created.\n");
-+ fprintf(stderr, " regfile_1..n : specifies one or more registry files which are merged.\n");
- }
-
--static bool checkCommandFile(char* cmdfile)
-+static bool checkCommandFile(char* cmdfile, bool& bInternal)
- {
- FILE *commandfile;
- char option[256];
-@@ -122,13 +123,17 @@ static bool checkCommandFile(char* cmdfi
- {
- if (option[0]== '@')
- {
-- bool bRet = checkCommandFile(option);
-+ bool bRet = checkCommandFile(option, bInternal);
- // ensure that the option will not be overwritten
- if ( !bRet )
- bVerbose = bRet;
- } else {
- if (option[0]== '-') {
-- if (strncmp(option, "-v", 2) == 0 ||
-+ if (strncmp(option, "-i", 2) == 0 ||
-+ strncmp(option, "--internal", 10) == 0)
-+ {
-+ bInternal = true;
-+ } else if (strncmp(option, "-v", 2) == 0 ||
- strncmp(option, "--verbose", 9) == 0)
- {
- bVerbose = true;
-@@ -155,23 +160,28 @@ static bool checkCommandFile(char* cmdfi
- return bVerbose;
- }
-
--static bool checkCommandArgs(int argc, char **argv)
-+static bool checkCommandArgs(int argc, char **argv, bool &bInternal)
- {
- bool bVerbose = false;
-
-+ bInternal = false;
- realargc = 0;
-
- for (int i=0; i<argc; i++)
- {
- if (argv[i][0]== '@')
- {
-- bool bRet = checkCommandFile(argv[i]);
-+ bool bRet = checkCommandFile(argv[i], bInternal);
- // ensure that the option will not be overwritten
- if ( !bRet )
- bVerbose = bRet;
- } else {
- if (argv[i][0]== '-') {
-- if (strncmp(argv[i], "-v", 2) == 0 ||
-+ if (strncmp(argv[i], "-i", 2) == 0 ||
-+ strncmp(argv[i], "--internal", 10) == 0)
-+ {
-+ bInternal = true;
-+ } else if (strncmp(argv[i], "-v", 2) == 0 ||
- strncmp(argv[i], "--verbose", 9) == 0)
- {
- bVerbose = true;
-@@ -209,7 +219,8 @@ int _cdecl main( int argc, char * argv[]
- {
- RegHandle hReg;
- RegKeyHandle hRootKey;
-- bool bVerbose = checkCommandArgs(argc, argv);
-+ bool bInternal;
-+ bool bVerbose = checkCommandArgs(argc, argv, bInternal);
-
- if (realargc < 4)
- {
-@@ -221,7 +232,7 @@ int _cdecl main( int argc, char * argv[]
- ::rtl::OUString regName( convertToFileUrl(realargv[1]) );
- if (reg_openRegistry(regName.pData, &hReg, REG_READWRITE))
- {
-- if (reg_createRegistry(regName.pData, &hReg))
-+ if (reg_createRegistry(regName.pData, &hReg, bInternal))
- {
- if (bVerbose)
- fprintf(stderr, "open registry \"%s\" failed\n", realargv[1]);
diff --git a/patches/test/store-v2-fileformat.diff b/patches/test/store-v2-fileformat.diff
index c24a75b..6f5a139 100644
--- a/patches/test/store-v2-fileformat.diff
+++ b/patches/test/store-v2-fileformat.diff
@@ -1,6 +1,11 @@
The minimal set of changes to read and write store v2 files
(More or less a re-write of the original store-core.diff)
+Hint: the current way of fixing up the wrong/missing magics for
+some pages (look for 'fixup()' method below) falls flat on its
+face in the mmapped read-only case (as one obviously cannot write
+into that mem). Go for the very simplistic store-crash-fix.diff
+approach instead (binning the type check in "isA()")
From: Thorsten Behrens <thb at openoffice.org>
More information about the ooo-build-commit
mailing list