xref: /aoo41x/main/store/source/store.cxx (revision 73d9b18a)
1*73d9b18aSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*73d9b18aSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*73d9b18aSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*73d9b18aSAndrew Rist  * distributed with this work for additional information
6*73d9b18aSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*73d9b18aSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*73d9b18aSAndrew Rist  * "License"); you may not use this file except in compliance
9*73d9b18aSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*73d9b18aSAndrew Rist  *
11*73d9b18aSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*73d9b18aSAndrew Rist  *
13*73d9b18aSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*73d9b18aSAndrew Rist  * software distributed under the License is distributed on an
15*73d9b18aSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*73d9b18aSAndrew Rist  * KIND, either express or implied.  See the License for the
17*73d9b18aSAndrew Rist  * specific language governing permissions and limitations
18*73d9b18aSAndrew Rist  * under the License.
19*73d9b18aSAndrew Rist  *
20*73d9b18aSAndrew Rist  *************************************************************/
21*73d9b18aSAndrew Rist 
22*73d9b18aSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_store.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "store/store.h"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <sal/types.h>
30cdf0e10cSrcweir #include <rtl/memory.h>
31cdf0e10cSrcweir #include <rtl/string.hxx>
32cdf0e10cSrcweir #include <rtl/ref.hxx>
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include "object.hxx"
35cdf0e10cSrcweir #include "lockbyte.hxx"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include "storbase.hxx"
38cdf0e10cSrcweir #include "storpage.hxx"
39cdf0e10cSrcweir #include "stordir.hxx"
40cdf0e10cSrcweir #include "storlckb.hxx"
41cdf0e10cSrcweir 
42cdf0e10cSrcweir using rtl::Reference;
43cdf0e10cSrcweir using rtl::OString;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir namespace store
46cdf0e10cSrcweir {
47cdf0e10cSrcweir /** Template helper class as type safe Reference to store_handle_type.
48cdf0e10cSrcweir  */
49cdf0e10cSrcweir template<class store_handle_type>
50cdf0e10cSrcweir class OStoreHandle : public rtl::Reference<store_handle_type>
51cdf0e10cSrcweir {
52cdf0e10cSrcweir public:
OStoreHandle(store_handle_type * pHandle)53cdf0e10cSrcweir 	OStoreHandle (store_handle_type * pHandle)
54cdf0e10cSrcweir 		: rtl::Reference<store_handle_type> (pHandle)
55cdf0e10cSrcweir 	{}
56cdf0e10cSrcweir 
query(void * pHandle)57cdf0e10cSrcweir 	static store_handle_type * SAL_CALL query (void * pHandle)
58cdf0e10cSrcweir 	{
59cdf0e10cSrcweir 		return store::query (
60cdf0e10cSrcweir 			static_cast<IStoreHandle*>(pHandle),
61cdf0e10cSrcweir 			static_cast<store_handle_type*>(0));
62cdf0e10cSrcweir 	}
63cdf0e10cSrcweir };
64cdf0e10cSrcweir }
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 
67cdf0e10cSrcweir using namespace store;
68cdf0e10cSrcweir 
69cdf0e10cSrcweir /*========================================================================
70cdf0e10cSrcweir  *
71cdf0e10cSrcweir  * storeHandle implementation.
72cdf0e10cSrcweir  *
73cdf0e10cSrcweir  *======================================================================*/
74cdf0e10cSrcweir /*
75cdf0e10cSrcweir  * store_acquireHandle.
76cdf0e10cSrcweir  */
store_acquireHandle(storeHandle Handle)77cdf0e10cSrcweir storeError SAL_CALL store_acquireHandle (
78cdf0e10cSrcweir 	storeHandle Handle
79cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
80cdf0e10cSrcweir {
81cdf0e10cSrcweir 	IStoreHandle *pHandle = static_cast<IStoreHandle*>(Handle);
82cdf0e10cSrcweir 	if (!pHandle)
83cdf0e10cSrcweir 		return store_E_InvalidHandle;
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 	pHandle->acquire();
86cdf0e10cSrcweir 	return store_E_None;
87cdf0e10cSrcweir }
88cdf0e10cSrcweir 
89cdf0e10cSrcweir /*
90cdf0e10cSrcweir  * store_releaseHandle.
91cdf0e10cSrcweir  */
store_releaseHandle(storeHandle Handle)92cdf0e10cSrcweir storeError SAL_CALL store_releaseHandle (
93cdf0e10cSrcweir 	storeHandle Handle
94cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
95cdf0e10cSrcweir {
96cdf0e10cSrcweir 	IStoreHandle *pHandle = static_cast<IStoreHandle*>(Handle);
97cdf0e10cSrcweir 	if (!pHandle)
98cdf0e10cSrcweir 		return store_E_InvalidHandle;
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 	pHandle->release();
101cdf0e10cSrcweir 	return store_E_None;
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir /*========================================================================
105cdf0e10cSrcweir  *
106cdf0e10cSrcweir  * storeFileHandle implementation.
107cdf0e10cSrcweir  *
108cdf0e10cSrcweir  *======================================================================*/
109cdf0e10cSrcweir /*
110cdf0e10cSrcweir  * store_createMemoryFile.
111cdf0e10cSrcweir  */
store_createMemoryFile(sal_uInt16 nPageSize,storeFileHandle * phFile)112cdf0e10cSrcweir storeError SAL_CALL store_createMemoryFile (
113cdf0e10cSrcweir 	sal_uInt16       nPageSize,
114cdf0e10cSrcweir 	storeFileHandle *phFile
115cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
116cdf0e10cSrcweir {
117cdf0e10cSrcweir 	if (!phFile)
118cdf0e10cSrcweir 		return store_E_InvalidParameter;
119cdf0e10cSrcweir 	*phFile = NULL;
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	Reference<ILockBytes> xLockBytes;
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 	storeError eErrCode = MemoryLockBytes_createInstance(xLockBytes);
124cdf0e10cSrcweir 	if (eErrCode != store_E_None)
125cdf0e10cSrcweir 		return eErrCode;
126cdf0e10cSrcweir 	OSL_ASSERT(xLockBytes.is());
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 	Reference<OStorePageManager> xManager (new OStorePageManager());
129cdf0e10cSrcweir 	if (!xManager.is())
130cdf0e10cSrcweir 		return store_E_OutOfMemory;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 	eErrCode = xManager->initialize (
133cdf0e10cSrcweir 		&*xLockBytes, store_AccessCreate, nPageSize);
134cdf0e10cSrcweir 	if (eErrCode != store_E_None)
135cdf0e10cSrcweir 		return eErrCode;
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 	xManager->acquire();
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 	*phFile = (storeFileHandle)&(*xManager);
140cdf0e10cSrcweir 	return store_E_None;
141cdf0e10cSrcweir }
142cdf0e10cSrcweir 
143cdf0e10cSrcweir /*
144cdf0e10cSrcweir  * store_openFile.
145cdf0e10cSrcweir  */
store_openFile(rtl_uString * pFilename,storeAccessMode eAccessMode,sal_uInt16 nPageSize,storeFileHandle * phFile)146cdf0e10cSrcweir storeError SAL_CALL store_openFile (
147cdf0e10cSrcweir 	rtl_uString     *pFilename,
148cdf0e10cSrcweir 	storeAccessMode  eAccessMode,
149cdf0e10cSrcweir 	sal_uInt16       nPageSize,
150cdf0e10cSrcweir 	storeFileHandle *phFile
151cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
152cdf0e10cSrcweir {
153cdf0e10cSrcweir 	if (phFile)
154cdf0e10cSrcweir 		*phFile = NULL;
155cdf0e10cSrcweir 
156cdf0e10cSrcweir 	if (!(pFilename && phFile))
157cdf0e10cSrcweir 		return store_E_InvalidParameter;
158cdf0e10cSrcweir 
159cdf0e10cSrcweir 	Reference<ILockBytes> xLockBytes;
160cdf0e10cSrcweir 
161cdf0e10cSrcweir 	storeError eErrCode = FileLockBytes_createInstance (xLockBytes, pFilename, eAccessMode);
162cdf0e10cSrcweir 	if (eErrCode != store_E_None)
163cdf0e10cSrcweir 		return eErrCode;
164cdf0e10cSrcweir 	OSL_ASSERT(xLockBytes.is());
165cdf0e10cSrcweir 
166cdf0e10cSrcweir 	Reference<OStorePageManager> xManager (new OStorePageManager());
167cdf0e10cSrcweir 	if (!xManager.is())
168cdf0e10cSrcweir 		return store_E_OutOfMemory;
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 	eErrCode = xManager->initialize (
171cdf0e10cSrcweir 		&*xLockBytes, eAccessMode, nPageSize);
172cdf0e10cSrcweir 	if (eErrCode != store_E_None)
173cdf0e10cSrcweir 		return eErrCode;
174cdf0e10cSrcweir 
175cdf0e10cSrcweir 	xManager->acquire();
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	*phFile = (storeFileHandle)&(*xManager);
178cdf0e10cSrcweir 	return store_E_None;
179cdf0e10cSrcweir }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir /*
182cdf0e10cSrcweir  * store_closeFile.
183cdf0e10cSrcweir  */
store_closeFile(storeFileHandle Handle)184cdf0e10cSrcweir storeError SAL_CALL store_closeFile (
185cdf0e10cSrcweir 	storeFileHandle Handle
186cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
187cdf0e10cSrcweir {
188cdf0e10cSrcweir 	OStorePageManager *pManager =
189cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle);
190cdf0e10cSrcweir 	if (!pManager)
191cdf0e10cSrcweir 		return store_E_InvalidHandle;
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 	storeError eErrCode = pManager->close();
194cdf0e10cSrcweir 	pManager->release();
195cdf0e10cSrcweir 	return eErrCode;
196cdf0e10cSrcweir }
197cdf0e10cSrcweir 
198cdf0e10cSrcweir /*
199cdf0e10cSrcweir  * store_flushFile.
200cdf0e10cSrcweir  */
store_flushFile(storeFileHandle Handle)201cdf0e10cSrcweir storeError SAL_CALL store_flushFile (
202cdf0e10cSrcweir 	storeFileHandle Handle
203cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
204cdf0e10cSrcweir {
205cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
206cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
207cdf0e10cSrcweir 	if (!xManager.is())
208cdf0e10cSrcweir 		return store_E_InvalidHandle;
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 	return xManager->flush();
211cdf0e10cSrcweir }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir /*
214cdf0e10cSrcweir  * store_getFileRefererCount.
215cdf0e10cSrcweir  */
store_getFileRefererCount(storeFileHandle Handle,sal_uInt32 * pnRefCount)216cdf0e10cSrcweir storeError SAL_CALL store_getFileRefererCount (
217cdf0e10cSrcweir 	storeFileHandle  Handle,
218cdf0e10cSrcweir 	sal_uInt32      *pnRefCount
219cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
220cdf0e10cSrcweir {
221cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
222cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
223cdf0e10cSrcweir 	if (!xManager.is())
224cdf0e10cSrcweir 		return store_E_InvalidHandle;
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 	if (!pnRefCount)
227cdf0e10cSrcweir 		return store_E_InvalidParameter;
228cdf0e10cSrcweir 
229cdf0e10cSrcweir 	*pnRefCount = xManager->getRefererCount();
230cdf0e10cSrcweir 	return store_E_None;
231cdf0e10cSrcweir }
232cdf0e10cSrcweir 
233cdf0e10cSrcweir /*
234cdf0e10cSrcweir  * store_getFileSize.
235cdf0e10cSrcweir  */
store_getFileSize(storeFileHandle Handle,sal_uInt32 * pnSize)236cdf0e10cSrcweir storeError SAL_CALL store_getFileSize (
237cdf0e10cSrcweir 	storeFileHandle  Handle,
238cdf0e10cSrcweir 	sal_uInt32      *pnSize
239cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
240cdf0e10cSrcweir {
241cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
242cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
243cdf0e10cSrcweir 	if (!xManager.is())
244cdf0e10cSrcweir 		return store_E_InvalidHandle;
245cdf0e10cSrcweir 
246cdf0e10cSrcweir 	if (!pnSize)
247cdf0e10cSrcweir 		return store_E_InvalidParameter;
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 	return xManager->size (*pnSize);
250cdf0e10cSrcweir }
251cdf0e10cSrcweir 
252cdf0e10cSrcweir /*
253cdf0e10cSrcweir  * store_rebuildFile.
254cdf0e10cSrcweir  */
store_rebuildFile(rtl_uString * pSrcFilename,rtl_uString * pDstFilename)255cdf0e10cSrcweir storeError SAL_CALL store_rebuildFile (
256cdf0e10cSrcweir 	rtl_uString *pSrcFilename,
257cdf0e10cSrcweir 	rtl_uString *pDstFilename
258cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
259cdf0e10cSrcweir {
260cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 	if (!(pSrcFilename && pDstFilename))
263cdf0e10cSrcweir 		return store_E_InvalidParameter;
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 	Reference<OStorePageManager> xManager (new OStorePageManager());
266cdf0e10cSrcweir 	if (!xManager.is())
267cdf0e10cSrcweir 		return store_E_OutOfMemory;
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 	Reference<ILockBytes> xSrcLB;
270cdf0e10cSrcweir 	eErrCode = FileLockBytes_createInstance (xSrcLB, pSrcFilename, store_AccessReadOnly);
271cdf0e10cSrcweir 	if (eErrCode != store_E_None)
272cdf0e10cSrcweir 		return eErrCode;
273cdf0e10cSrcweir 	OSL_ASSERT(xSrcLB.is());
274cdf0e10cSrcweir 
275cdf0e10cSrcweir 	Reference<ILockBytes> xDstLB;
276cdf0e10cSrcweir 	eErrCode = FileLockBytes_createInstance (xDstLB, pDstFilename, store_AccessCreate);
277cdf0e10cSrcweir 	if (eErrCode != store_E_None)
278cdf0e10cSrcweir 		return eErrCode;
279cdf0e10cSrcweir 	OSL_ASSERT(xDstLB.is());
280cdf0e10cSrcweir 
281cdf0e10cSrcweir 	return xManager->rebuild (&*xSrcLB, &*xDstLB);
282cdf0e10cSrcweir }
283cdf0e10cSrcweir 
284cdf0e10cSrcweir /*========================================================================
285cdf0e10cSrcweir  *
286cdf0e10cSrcweir  * storeDirectoryHandle implementation.
287cdf0e10cSrcweir  *
288cdf0e10cSrcweir  *======================================================================*/
289cdf0e10cSrcweir /*
290cdf0e10cSrcweir  * store_openDirectory.
291cdf0e10cSrcweir  */
store_openDirectory(storeFileHandle hFile,rtl_uString * pPath,rtl_uString * pName,storeAccessMode eAccessMode,storeDirectoryHandle * phDirectory)292cdf0e10cSrcweir storeError SAL_CALL store_openDirectory (
293cdf0e10cSrcweir 	storeFileHandle       hFile,
294cdf0e10cSrcweir 	rtl_uString          *pPath,
295cdf0e10cSrcweir 	rtl_uString          *pName,
296cdf0e10cSrcweir 	storeAccessMode       eAccessMode,
297cdf0e10cSrcweir 	storeDirectoryHandle *phDirectory
298cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
299cdf0e10cSrcweir {
300cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
301cdf0e10cSrcweir 	if (phDirectory)
302cdf0e10cSrcweir 		*phDirectory = NULL;
303cdf0e10cSrcweir 
304cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
305cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (hFile));
306cdf0e10cSrcweir 	if (!xManager.is())
307cdf0e10cSrcweir 		return store_E_InvalidHandle;
308cdf0e10cSrcweir 
309cdf0e10cSrcweir 	if (!(pPath && pName && phDirectory))
310cdf0e10cSrcweir 		return store_E_InvalidParameter;
311cdf0e10cSrcweir 
312cdf0e10cSrcweir 	Reference<OStoreDirectory_Impl> xDirectory (new OStoreDirectory_Impl());
313cdf0e10cSrcweir 	if (!xDirectory.is())
314cdf0e10cSrcweir 		return store_E_OutOfMemory;
315cdf0e10cSrcweir 
316cdf0e10cSrcweir 	OString aPath (pPath->buffer, pPath->length, RTL_TEXTENCODING_UTF8);
317cdf0e10cSrcweir 	OString aName (pName->buffer, pName->length, RTL_TEXTENCODING_UTF8);
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 	eErrCode = xDirectory->create (&*xManager, aPath.pData, aName.pData, eAccessMode);
320cdf0e10cSrcweir 	if (eErrCode != store_E_None)
321cdf0e10cSrcweir 		return eErrCode;
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 	xDirectory->acquire();
324cdf0e10cSrcweir 
325cdf0e10cSrcweir 	*phDirectory = (storeDirectoryHandle)&(*xDirectory);
326cdf0e10cSrcweir 	return store_E_None;
327cdf0e10cSrcweir }
328cdf0e10cSrcweir 
329cdf0e10cSrcweir /*
330cdf0e10cSrcweir  * store_closeDirectory.
331cdf0e10cSrcweir  */
store_closeDirectory(storeDirectoryHandle Handle)332cdf0e10cSrcweir storeError SAL_CALL store_closeDirectory (
333cdf0e10cSrcweir 	storeDirectoryHandle Handle
334cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
335cdf0e10cSrcweir {
336cdf0e10cSrcweir 	OStoreDirectory_Impl *pDirectory =
337cdf0e10cSrcweir 		OStoreHandle<OStoreDirectory_Impl>::query (Handle);
338cdf0e10cSrcweir 	if (!pDirectory)
339cdf0e10cSrcweir 		return store_E_InvalidHandle;
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 	pDirectory->release();
342cdf0e10cSrcweir 	return store_E_None;
343cdf0e10cSrcweir }
344cdf0e10cSrcweir 
345cdf0e10cSrcweir /*
346cdf0e10cSrcweir  * store_findFirst.
347cdf0e10cSrcweir  */
store_findFirst(storeDirectoryHandle Handle,storeFindData * pFindData)348cdf0e10cSrcweir storeError SAL_CALL store_findFirst (
349cdf0e10cSrcweir 	storeDirectoryHandle  Handle,
350cdf0e10cSrcweir 	storeFindData        *pFindData
351cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
352cdf0e10cSrcweir {
353cdf0e10cSrcweir 	OStoreHandle<OStoreDirectory_Impl> xDirectory (
354cdf0e10cSrcweir 		OStoreHandle<OStoreDirectory_Impl>::query (Handle));
355cdf0e10cSrcweir 	if (!xDirectory.is())
356cdf0e10cSrcweir 		return store_E_InvalidHandle;
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 	if (!pFindData)
359cdf0e10cSrcweir 		return store_E_InvalidParameter;
360cdf0e10cSrcweir 
361cdf0e10cSrcweir 	// Initialize FindData.
362cdf0e10cSrcweir 	rtl_zeroMemory (pFindData, sizeof (storeFindData));
363cdf0e10cSrcweir 
364cdf0e10cSrcweir 	// Find first.
365cdf0e10cSrcweir 	pFindData->m_nReserved = (sal_uInt32)(~0);
366cdf0e10cSrcweir 	return xDirectory->iterate (*pFindData);
367cdf0e10cSrcweir }
368cdf0e10cSrcweir 
369cdf0e10cSrcweir /*
370cdf0e10cSrcweir  * store_findNext.
371cdf0e10cSrcweir  */
store_findNext(storeDirectoryHandle Handle,storeFindData * pFindData)372cdf0e10cSrcweir storeError SAL_CALL store_findNext (
373cdf0e10cSrcweir 	storeDirectoryHandle  Handle,
374cdf0e10cSrcweir 	storeFindData        *pFindData
375cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
376cdf0e10cSrcweir {
377cdf0e10cSrcweir 	OStoreHandle<OStoreDirectory_Impl> xDirectory (
378cdf0e10cSrcweir 		OStoreHandle<OStoreDirectory_Impl>::query (Handle));
379cdf0e10cSrcweir 	if (!xDirectory.is())
380cdf0e10cSrcweir 		return store_E_InvalidHandle;
381cdf0e10cSrcweir 
382cdf0e10cSrcweir 	if (!pFindData)
383cdf0e10cSrcweir 		return store_E_InvalidParameter;
384cdf0e10cSrcweir 
385cdf0e10cSrcweir 	// Check FindData.
386cdf0e10cSrcweir 	if (!pFindData->m_nReserved)
387cdf0e10cSrcweir 		return store_E_NoMoreFiles;
388cdf0e10cSrcweir 
389cdf0e10cSrcweir 	// Find next.
390cdf0e10cSrcweir 	pFindData->m_nReserved -= 1;
391cdf0e10cSrcweir 	return xDirectory->iterate (*pFindData);
392cdf0e10cSrcweir }
393cdf0e10cSrcweir 
394cdf0e10cSrcweir /*========================================================================
395cdf0e10cSrcweir  *
396cdf0e10cSrcweir  * storeStreamHandle implementation.
397cdf0e10cSrcweir  *
398cdf0e10cSrcweir  *======================================================================*/
399cdf0e10cSrcweir /*
400cdf0e10cSrcweir  * store_openStream
401cdf0e10cSrcweir  */
store_openStream(storeFileHandle hFile,rtl_uString * pPath,rtl_uString * pName,storeAccessMode eAccessMode,storeStreamHandle * phStream)402cdf0e10cSrcweir storeError SAL_CALL store_openStream (
403cdf0e10cSrcweir 	storeFileHandle    hFile,
404cdf0e10cSrcweir 	rtl_uString       *pPath,
405cdf0e10cSrcweir 	rtl_uString       *pName,
406cdf0e10cSrcweir 	storeAccessMode    eAccessMode,
407cdf0e10cSrcweir 	storeStreamHandle *phStream
408cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
409cdf0e10cSrcweir {
410cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
411cdf0e10cSrcweir 	if (phStream)
412cdf0e10cSrcweir 		*phStream = NULL;
413cdf0e10cSrcweir 
414cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
415cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (hFile));
416cdf0e10cSrcweir 	if (!xManager.is())
417cdf0e10cSrcweir 		return store_E_InvalidHandle;
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 	if (!(pPath && pName && phStream))
420cdf0e10cSrcweir 		return store_E_InvalidParameter;
421cdf0e10cSrcweir 
422cdf0e10cSrcweir 	Reference<OStoreLockBytes> xLockBytes (new OStoreLockBytes());
423cdf0e10cSrcweir 	if (!xLockBytes.is())
424cdf0e10cSrcweir 		return store_E_OutOfMemory;
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 	OString aPath (pPath->buffer, pPath->length, RTL_TEXTENCODING_UTF8);
427cdf0e10cSrcweir 	OString aName (pName->buffer, pName->length, RTL_TEXTENCODING_UTF8);
428cdf0e10cSrcweir 
429cdf0e10cSrcweir 	eErrCode = xLockBytes->create (&*xManager, aPath.pData, aName.pData, eAccessMode);
430cdf0e10cSrcweir 	if (eErrCode != store_E_None)
431cdf0e10cSrcweir 		return eErrCode;
432cdf0e10cSrcweir 
433cdf0e10cSrcweir 	xLockBytes->acquire();
434cdf0e10cSrcweir 
435cdf0e10cSrcweir 	*phStream = (storeStreamHandle)&(*xLockBytes);
436cdf0e10cSrcweir 	return store_E_None;
437cdf0e10cSrcweir }
438cdf0e10cSrcweir 
439cdf0e10cSrcweir /*
440cdf0e10cSrcweir  * store_closeStream.
441cdf0e10cSrcweir  */
store_closeStream(storeStreamHandle Handle)442cdf0e10cSrcweir storeError SAL_CALL store_closeStream (
443cdf0e10cSrcweir 	storeStreamHandle Handle
444cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
445cdf0e10cSrcweir {
446cdf0e10cSrcweir 	OStoreLockBytes *pLockBytes =
447cdf0e10cSrcweir 		OStoreHandle<OStoreLockBytes>::query (Handle);
448cdf0e10cSrcweir 	if (!pLockBytes)
449cdf0e10cSrcweir 		return store_E_InvalidHandle;
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 	pLockBytes->release();
452cdf0e10cSrcweir 	return store_E_None;
453cdf0e10cSrcweir }
454cdf0e10cSrcweir 
455cdf0e10cSrcweir /*
456cdf0e10cSrcweir  * store_readStream.
457cdf0e10cSrcweir  */
store_readStream(storeStreamHandle Handle,sal_uInt32 nOffset,void * pBuffer,sal_uInt32 nBytes,sal_uInt32 * pnDone)458cdf0e10cSrcweir storeError SAL_CALL store_readStream (
459cdf0e10cSrcweir 	storeStreamHandle  Handle,
460cdf0e10cSrcweir 	sal_uInt32         nOffset,
461cdf0e10cSrcweir 	void              *pBuffer,
462cdf0e10cSrcweir 	sal_uInt32         nBytes,
463cdf0e10cSrcweir 	sal_uInt32        *pnDone
464cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
465cdf0e10cSrcweir {
466cdf0e10cSrcweir 	OStoreHandle<OStoreLockBytes> xLockBytes (
467cdf0e10cSrcweir 		OStoreHandle<OStoreLockBytes>::query (Handle));
468cdf0e10cSrcweir 	if (!xLockBytes.is())
469cdf0e10cSrcweir 		return store_E_InvalidHandle;
470cdf0e10cSrcweir 
471cdf0e10cSrcweir 	if (!(pBuffer && pnDone))
472cdf0e10cSrcweir 		return store_E_InvalidParameter;
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 	return xLockBytes->readAt (nOffset, pBuffer, nBytes, *pnDone);
475cdf0e10cSrcweir }
476cdf0e10cSrcweir 
477cdf0e10cSrcweir /*
478cdf0e10cSrcweir  * store_writeStream.
479cdf0e10cSrcweir  */
store_writeStream(storeStreamHandle Handle,sal_uInt32 nOffset,const void * pBuffer,sal_uInt32 nBytes,sal_uInt32 * pnDone)480cdf0e10cSrcweir storeError SAL_CALL store_writeStream (
481cdf0e10cSrcweir 	storeStreamHandle  Handle,
482cdf0e10cSrcweir 	sal_uInt32         nOffset,
483cdf0e10cSrcweir 	const void        *pBuffer,
484cdf0e10cSrcweir 	sal_uInt32         nBytes,
485cdf0e10cSrcweir 	sal_uInt32        *pnDone
486cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
487cdf0e10cSrcweir {
488cdf0e10cSrcweir 	OStoreHandle<OStoreLockBytes> xLockBytes (
489cdf0e10cSrcweir 		OStoreHandle<OStoreLockBytes>::query (Handle));
490cdf0e10cSrcweir 	if (!xLockBytes.is())
491cdf0e10cSrcweir 		return store_E_InvalidHandle;
492cdf0e10cSrcweir 
493cdf0e10cSrcweir 	if (!(pBuffer && pnDone))
494cdf0e10cSrcweir 		return store_E_InvalidParameter;
495cdf0e10cSrcweir 
496cdf0e10cSrcweir 	return xLockBytes->writeAt (nOffset, pBuffer, nBytes, *pnDone);
497cdf0e10cSrcweir }
498cdf0e10cSrcweir 
499cdf0e10cSrcweir /*
500cdf0e10cSrcweir  * store_flushStream.
501cdf0e10cSrcweir  */
store_flushStream(storeStreamHandle Handle)502cdf0e10cSrcweir storeError SAL_CALL store_flushStream (
503cdf0e10cSrcweir 	storeStreamHandle Handle
504cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
505cdf0e10cSrcweir {
506cdf0e10cSrcweir 	OStoreHandle<OStoreLockBytes> xLockBytes (
507cdf0e10cSrcweir 		OStoreHandle<OStoreLockBytes>::query (Handle));
508cdf0e10cSrcweir 	if (!xLockBytes.is())
509cdf0e10cSrcweir 		return store_E_InvalidHandle;
510cdf0e10cSrcweir 
511cdf0e10cSrcweir 	return xLockBytes->flush();
512cdf0e10cSrcweir }
513cdf0e10cSrcweir 
514cdf0e10cSrcweir /*
515cdf0e10cSrcweir  * store_getStreamSize.
516cdf0e10cSrcweir  */
store_getStreamSize(storeStreamHandle Handle,sal_uInt32 * pnSize)517cdf0e10cSrcweir storeError SAL_CALL store_getStreamSize (
518cdf0e10cSrcweir 	storeStreamHandle  Handle,
519cdf0e10cSrcweir 	sal_uInt32        *pnSize
520cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
521cdf0e10cSrcweir {
522cdf0e10cSrcweir 	OStoreHandle<OStoreLockBytes> xLockBytes (
523cdf0e10cSrcweir 		OStoreHandle<OStoreLockBytes>::query (Handle));
524cdf0e10cSrcweir 	if (!xLockBytes.is())
525cdf0e10cSrcweir 		return store_E_InvalidHandle;
526cdf0e10cSrcweir 
527cdf0e10cSrcweir 	if (!pnSize)
528cdf0e10cSrcweir 		return store_E_InvalidParameter;
529cdf0e10cSrcweir 
530cdf0e10cSrcweir 	return xLockBytes->stat (*pnSize);
531cdf0e10cSrcweir }
532cdf0e10cSrcweir 
533cdf0e10cSrcweir /*
534cdf0e10cSrcweir  * store_setStreamSize.
535cdf0e10cSrcweir  */
store_setStreamSize(storeStreamHandle Handle,sal_uInt32 nSize)536cdf0e10cSrcweir storeError SAL_CALL store_setStreamSize (
537cdf0e10cSrcweir 	storeStreamHandle Handle,
538cdf0e10cSrcweir 	sal_uInt32        nSize
539cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
540cdf0e10cSrcweir {
541cdf0e10cSrcweir 	OStoreHandle<OStoreLockBytes> xLockBytes (
542cdf0e10cSrcweir 		OStoreHandle<OStoreLockBytes>::query (Handle));
543cdf0e10cSrcweir 	if (!xLockBytes.is())
544cdf0e10cSrcweir 		return store_E_InvalidHandle;
545cdf0e10cSrcweir 
546cdf0e10cSrcweir 	return xLockBytes->setSize (nSize);
547cdf0e10cSrcweir }
548cdf0e10cSrcweir 
549cdf0e10cSrcweir /*========================================================================
550cdf0e10cSrcweir  *
551cdf0e10cSrcweir  * Common storeDirectoryHandle and storeStreamHandle operations.
552cdf0e10cSrcweir  *
553cdf0e10cSrcweir  *======================================================================*/
554cdf0e10cSrcweir /*
555cdf0e10cSrcweir  * store_attrib.
556cdf0e10cSrcweir  */
store_attrib(storeFileHandle Handle,rtl_uString * pPath,rtl_uString * pName,sal_uInt32 nMask1,sal_uInt32 nMask2,sal_uInt32 * pnAttrib)557cdf0e10cSrcweir storeError SAL_CALL store_attrib (
558cdf0e10cSrcweir 	storeFileHandle Handle,
559cdf0e10cSrcweir 	rtl_uString    *pPath,
560cdf0e10cSrcweir 	rtl_uString    *pName,
561cdf0e10cSrcweir 	sal_uInt32      nMask1,
562cdf0e10cSrcweir 	sal_uInt32      nMask2,
563cdf0e10cSrcweir 	sal_uInt32     *pnAttrib
564cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
565cdf0e10cSrcweir {
566cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
567cdf0e10cSrcweir 	if (pnAttrib)
568cdf0e10cSrcweir 		*pnAttrib = 0;
569cdf0e10cSrcweir 
570cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
571cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
572cdf0e10cSrcweir 	if (!xManager.is())
573cdf0e10cSrcweir 		return store_E_InvalidHandle;
574cdf0e10cSrcweir 
575cdf0e10cSrcweir 	if (!(pPath && pName))
576cdf0e10cSrcweir 		return store_E_InvalidParameter;
577cdf0e10cSrcweir 
578cdf0e10cSrcweir 	// Setup page key.
579cdf0e10cSrcweir 	OString aPath (pPath->buffer, pPath->length, RTL_TEXTENCODING_UTF8);
580cdf0e10cSrcweir 	OString aName (pName->buffer, pName->length, RTL_TEXTENCODING_UTF8);
581cdf0e10cSrcweir 	OStorePageKey aKey;
582cdf0e10cSrcweir 
583cdf0e10cSrcweir 	eErrCode = OStorePageManager::namei (aPath.pData, aName.pData, aKey);
584cdf0e10cSrcweir 	if (eErrCode != store_E_None)
585cdf0e10cSrcweir 		return eErrCode;
586cdf0e10cSrcweir 
587cdf0e10cSrcweir 	// Obtain or modify page attributes.
588cdf0e10cSrcweir 	sal_uInt32 nAttrib = 0;
589cdf0e10cSrcweir 	eErrCode = xManager->attrib (aKey, nMask1, nMask2, nAttrib);
590cdf0e10cSrcweir 	if (pnAttrib)
591cdf0e10cSrcweir 		*pnAttrib = nAttrib;
592cdf0e10cSrcweir 	return eErrCode;
593cdf0e10cSrcweir }
594cdf0e10cSrcweir 
595cdf0e10cSrcweir /*
596cdf0e10cSrcweir  * store_link.
597cdf0e10cSrcweir  */
store_link(storeFileHandle Handle,rtl_uString * pSrcPath,rtl_uString * pSrcName,rtl_uString * pDstPath,rtl_uString * pDstName)598cdf0e10cSrcweir storeError SAL_CALL store_link (
599cdf0e10cSrcweir 	storeFileHandle Handle,
600cdf0e10cSrcweir 	rtl_uString *pSrcPath, rtl_uString *pSrcName,
601cdf0e10cSrcweir 	rtl_uString *pDstPath, rtl_uString *pDstName
602cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
603cdf0e10cSrcweir {
604cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
605cdf0e10cSrcweir 
606cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
607cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
608cdf0e10cSrcweir 	if (!xManager.is())
609cdf0e10cSrcweir 		return store_E_InvalidHandle;
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 	if (!(pSrcPath && pSrcName))
612cdf0e10cSrcweir 		return store_E_InvalidParameter;
613cdf0e10cSrcweir 
614cdf0e10cSrcweir 	if (!(pDstPath && pDstName))
615cdf0e10cSrcweir 		return store_E_InvalidParameter;
616cdf0e10cSrcweir 
617cdf0e10cSrcweir 	// Setup 'Source' page key.
618cdf0e10cSrcweir 	OString aSrcPath (
619cdf0e10cSrcweir 		pSrcPath->buffer, pSrcPath->length, RTL_TEXTENCODING_UTF8);
620cdf0e10cSrcweir 	OString aSrcName (
621cdf0e10cSrcweir 		pSrcName->buffer, pSrcName->length, RTL_TEXTENCODING_UTF8);
622cdf0e10cSrcweir 	OStorePageKey aSrcKey;
623cdf0e10cSrcweir 
624cdf0e10cSrcweir 	eErrCode = OStorePageManager::namei (
625cdf0e10cSrcweir 		aSrcPath.pData, aSrcName.pData, aSrcKey);
626cdf0e10cSrcweir 	if (eErrCode != store_E_None)
627cdf0e10cSrcweir 		return eErrCode;
628cdf0e10cSrcweir 
629cdf0e10cSrcweir 	// Setup 'Destination' page key.
630cdf0e10cSrcweir 	OString aDstPath (
631cdf0e10cSrcweir 		pDstPath->buffer, pDstPath->length, RTL_TEXTENCODING_UTF8);
632cdf0e10cSrcweir 	OString aDstName (
633cdf0e10cSrcweir 		pDstName->buffer, pDstName->length, RTL_TEXTENCODING_UTF8);
634cdf0e10cSrcweir 	OStorePageKey aDstKey;
635cdf0e10cSrcweir 
636cdf0e10cSrcweir 	eErrCode = OStorePageManager::namei (
637cdf0e10cSrcweir 		aDstPath.pData, aDstName.pData, aDstKey);
638cdf0e10cSrcweir 	if (eErrCode != store_E_None)
639cdf0e10cSrcweir 		return eErrCode;
640cdf0e10cSrcweir 
641cdf0e10cSrcweir 	// Link 'Source' hard to 'Destination'.
642cdf0e10cSrcweir 	return xManager->link (aSrcKey, aDstKey);
643cdf0e10cSrcweir }
644cdf0e10cSrcweir 
645cdf0e10cSrcweir /*
646cdf0e10cSrcweir  * store_symlink.
647cdf0e10cSrcweir  */
store_symlink(storeFileHandle Handle,rtl_uString * pSrcPath,rtl_uString * pSrcName,rtl_uString * pDstPath,rtl_uString * pDstName)648cdf0e10cSrcweir storeError SAL_CALL store_symlink (
649cdf0e10cSrcweir 	storeFileHandle Handle,
650cdf0e10cSrcweir 	rtl_uString *pSrcPath, rtl_uString *pSrcName,
651cdf0e10cSrcweir 	rtl_uString *pDstPath, rtl_uString *pDstName
652cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
653cdf0e10cSrcweir {
654cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
655cdf0e10cSrcweir 
656cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
657cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
658cdf0e10cSrcweir 	if (!xManager.is())
659cdf0e10cSrcweir 		return store_E_InvalidHandle;
660cdf0e10cSrcweir 
661cdf0e10cSrcweir 	if (!(pSrcPath && pSrcName))
662cdf0e10cSrcweir 		return store_E_InvalidParameter;
663cdf0e10cSrcweir 
664cdf0e10cSrcweir 	if (!(pDstPath && pDstName))
665cdf0e10cSrcweir 		return store_E_InvalidParameter;
666cdf0e10cSrcweir 
667cdf0e10cSrcweir 	// Setup 'Destination' page key.
668cdf0e10cSrcweir 	OString aDstPath (
669cdf0e10cSrcweir 		pDstPath->buffer, pDstPath->length, RTL_TEXTENCODING_UTF8);
670cdf0e10cSrcweir 	OString aDstName (
671cdf0e10cSrcweir 		pDstName->buffer, pDstName->length, RTL_TEXTENCODING_UTF8);
672cdf0e10cSrcweir 	OStorePageKey aDstKey;
673cdf0e10cSrcweir 
674cdf0e10cSrcweir 	eErrCode = OStorePageManager::namei (
675cdf0e10cSrcweir 		aDstPath.pData, aDstName.pData, aDstKey);
676cdf0e10cSrcweir 	if (eErrCode != store_E_None)
677cdf0e10cSrcweir 		return eErrCode;
678cdf0e10cSrcweir 
679cdf0e10cSrcweir 	// Insert 'Source' as symlink to 'Destination'.
680cdf0e10cSrcweir 	OString aSrcPath (
681cdf0e10cSrcweir 		pSrcPath->buffer, pSrcPath->length, RTL_TEXTENCODING_UTF8);
682cdf0e10cSrcweir 	OString aSrcName (
683cdf0e10cSrcweir 		pSrcName->buffer, pSrcName->length, RTL_TEXTENCODING_UTF8);
684cdf0e10cSrcweir 
685cdf0e10cSrcweir 	return xManager->symlink (aSrcPath.pData, aSrcName.pData, aDstKey);
686cdf0e10cSrcweir }
687cdf0e10cSrcweir 
688cdf0e10cSrcweir /*
689cdf0e10cSrcweir  * store_rename.
690cdf0e10cSrcweir  */
store_rename(storeFileHandle Handle,rtl_uString * pSrcPath,rtl_uString * pSrcName,rtl_uString * pDstPath,rtl_uString * pDstName)691cdf0e10cSrcweir storeError SAL_CALL store_rename (
692cdf0e10cSrcweir 	storeFileHandle Handle,
693cdf0e10cSrcweir 	rtl_uString *pSrcPath, rtl_uString *pSrcName,
694cdf0e10cSrcweir 	rtl_uString *pDstPath, rtl_uString *pDstName
695cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
696cdf0e10cSrcweir {
697cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
698cdf0e10cSrcweir 
699cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
700cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
701cdf0e10cSrcweir 	if (!xManager.is())
702cdf0e10cSrcweir 		return store_E_InvalidHandle;
703cdf0e10cSrcweir 
704cdf0e10cSrcweir 	if (!(pSrcPath && pSrcName))
705cdf0e10cSrcweir 		return store_E_InvalidParameter;
706cdf0e10cSrcweir 
707cdf0e10cSrcweir 	if (!(pDstPath && pDstName))
708cdf0e10cSrcweir 		return store_E_InvalidParameter;
709cdf0e10cSrcweir 
710cdf0e10cSrcweir 	// Setup 'Source' page key.
711cdf0e10cSrcweir 	OString aSrcPath (
712cdf0e10cSrcweir 		pSrcPath->buffer, pSrcPath->length, RTL_TEXTENCODING_UTF8);
713cdf0e10cSrcweir 	OString aSrcName (
714cdf0e10cSrcweir 		pSrcName->buffer, pSrcName->length, RTL_TEXTENCODING_UTF8);
715cdf0e10cSrcweir 	OStorePageKey aSrcKey;
716cdf0e10cSrcweir 
717cdf0e10cSrcweir 	eErrCode = OStorePageManager::namei (
718cdf0e10cSrcweir 		aSrcPath.pData, aSrcName.pData, aSrcKey);
719cdf0e10cSrcweir 	if (eErrCode != store_E_None)
720cdf0e10cSrcweir 		return eErrCode;
721cdf0e10cSrcweir 
722cdf0e10cSrcweir 	// Rename 'Source' into 'Destination'.
723cdf0e10cSrcweir 	OString aDstPath (
724cdf0e10cSrcweir 		pDstPath->buffer, pDstPath->length, RTL_TEXTENCODING_UTF8);
725cdf0e10cSrcweir 	OString aDstName (
726cdf0e10cSrcweir 		pDstName->buffer, pDstName->length, RTL_TEXTENCODING_UTF8);
727cdf0e10cSrcweir 
728cdf0e10cSrcweir 	return xManager->rename (aSrcKey, aDstPath.pData, aDstName.pData);
729cdf0e10cSrcweir }
730cdf0e10cSrcweir 
731cdf0e10cSrcweir /*
732cdf0e10cSrcweir  * store_remove.
733cdf0e10cSrcweir  */
store_remove(storeFileHandle Handle,rtl_uString * pPath,rtl_uString * pName)734cdf0e10cSrcweir storeError SAL_CALL store_remove (
735cdf0e10cSrcweir 	storeFileHandle Handle,
736cdf0e10cSrcweir 	rtl_uString    *pPath,
737cdf0e10cSrcweir 	rtl_uString    *pName
738cdf0e10cSrcweir ) SAL_THROW_EXTERN_C()
739cdf0e10cSrcweir {
740cdf0e10cSrcweir 	storeError eErrCode = store_E_None;
741cdf0e10cSrcweir 
742cdf0e10cSrcweir 	OStoreHandle<OStorePageManager> xManager (
743cdf0e10cSrcweir 		OStoreHandle<OStorePageManager>::query (Handle));
744cdf0e10cSrcweir 	if (!xManager.is())
745cdf0e10cSrcweir 		return store_E_InvalidHandle;
746cdf0e10cSrcweir 
747cdf0e10cSrcweir 	if (!(pPath && pName))
748cdf0e10cSrcweir 		return store_E_InvalidParameter;
749cdf0e10cSrcweir 
750cdf0e10cSrcweir 	// Setup page key.
751cdf0e10cSrcweir 	OString aPath (pPath->buffer, pPath->length, RTL_TEXTENCODING_UTF8);
752cdf0e10cSrcweir 	OString aName (pName->buffer, pName->length, RTL_TEXTENCODING_UTF8);
753cdf0e10cSrcweir 	OStorePageKey aKey;
754cdf0e10cSrcweir 
755cdf0e10cSrcweir 	eErrCode = OStorePageManager::namei (aPath.pData, aName.pData, aKey);
756cdf0e10cSrcweir 	if (eErrCode != store_E_None)
757cdf0e10cSrcweir 		return eErrCode;
758cdf0e10cSrcweir 
759cdf0e10cSrcweir 	// Remove.
760cdf0e10cSrcweir 	return xManager->remove (aKey);
761cdf0e10cSrcweir }
762