xref: /aoo41x/main/tools/source/fsys/tdir.cxx (revision 79aad27f)
1*89b56da7SAndrew Rist /**************************************************************
2*89b56da7SAndrew Rist  *
3*89b56da7SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*89b56da7SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*89b56da7SAndrew Rist  * distributed with this work for additional information
6*89b56da7SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*89b56da7SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*89b56da7SAndrew Rist  * "License"); you may not use this file except in compliance
9*89b56da7SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*89b56da7SAndrew Rist  *
11*89b56da7SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*89b56da7SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*89b56da7SAndrew Rist  * software distributed under the License is distributed on an
15*89b56da7SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*89b56da7SAndrew Rist  * KIND, either express or implied.  See the License for the
17*89b56da7SAndrew Rist  * specific language governing permissions and limitations
18*89b56da7SAndrew Rist  * under the License.
19*89b56da7SAndrew Rist  *
20*89b56da7SAndrew Rist  *************************************************************/
21*89b56da7SAndrew Rist 
22*89b56da7SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_tools.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #define _DIR_CXX
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <stdlib.h>
30cdf0e10cSrcweir #include <cstdarg>
31cdf0e10cSrcweir #include <limits.h>
32cdf0e10cSrcweir #include <tools/debug.hxx>
33cdf0e10cSrcweir #include <tools/list.hxx>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #ifndef _COMPED_HXX
36cdf0e10cSrcweir #include "comdep.hxx"
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #include <tools/fsys.hxx>
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 
41cdf0e10cSrcweir DBG_NAME( Dir )
42cdf0e10cSrcweir 
DECLARE_LIST(DirEntryList,DirEntry *)43cdf0e10cSrcweir DECLARE_LIST( DirEntryList, DirEntry* )
44cdf0e10cSrcweir DECLARE_LIST( FSysSortList, FSysSort* )
45cdf0e10cSrcweir DECLARE_LIST( FileStatList, FileStat* )
46cdf0e10cSrcweir 
47cdf0e10cSrcweir #define APPEND (sal_uInt16) 65535
48cdf0e10cSrcweir 
49cdf0e10cSrcweir /*************************************************************************
50cdf0e10cSrcweir |*
51cdf0e10cSrcweir |*    Dir::InsertPointReached()
52cdf0e10cSrcweir |*
53cdf0e10cSrcweir |*    Beschreibung      stellt fest, ob eingefuegt werden musz
54cdf0e10cSrcweir |*    Ersterstellung    MA 05.11.91
55cdf0e10cSrcweir |*    Letzte Aenderung  MI 05.02.92
56cdf0e10cSrcweir |*
57cdf0e10cSrcweir *************************************************************************/
58cdf0e10cSrcweir 
59cdf0e10cSrcweir sal_Bool Dir::ImpInsertPointReached( const DirEntry& rNewEntry,
60cdf0e10cSrcweir                                  const FileStat& rNewStat,
61cdf0e10cSrcweir                                  sal_uIntPtr nCurPos, sal_uIntPtr nSortIndex ) const
62cdf0e10cSrcweir {
63cdf0e10cSrcweir #define VALUE( nKindFlags ) \
64cdf0e10cSrcweir     ( ( FSYS_KIND_FILE | FSYS_KIND_DIR | FSYS_KIND_DEV | \
65cdf0e10cSrcweir         FSYS_KIND_CHAR | FSYS_KIND_BLOCK ) & nKindFlags )
66cdf0e10cSrcweir 
67cdf0e10cSrcweir     // einfache Dinge erfordern einfache Loesungen
68cdf0e10cSrcweir     if ( !pLst->Count() )
69cdf0e10cSrcweir         return sal_True;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     FSysSort  nSort      = *( pSortLst->GetObject( nSortIndex ) );
72cdf0e10cSrcweir     FileStat *pOldStat   = NULL;
73cdf0e10cSrcweir     DirEntry *pCurLstObj = pLst->GetObject( nCurPos );
74cdf0e10cSrcweir     if ( pStatLst )
75cdf0e10cSrcweir         pOldStat = pStatLst->GetObject( nCurPos );
76cdf0e10cSrcweir 
77cdf0e10cSrcweir     switch( nSort )
78cdf0e10cSrcweir     {
79cdf0e10cSrcweir         case  FSYS_SORT_NAME:
80cdf0e10cSrcweir         case (FSYS_SORT_NAME | FSYS_SORT_ASCENDING):
81cdf0e10cSrcweir             if ( pCurLstObj->aName > rNewEntry.aName )
82cdf0e10cSrcweir                 return sal_True;
83cdf0e10cSrcweir             if ( !(pCurLstObj->aName == rNewEntry.aName) )
84cdf0e10cSrcweir                 return sal_False;
85cdf0e10cSrcweir             break;
86cdf0e10cSrcweir         case (FSYS_SORT_NAME | FSYS_SORT_DESCENDING):
87cdf0e10cSrcweir             if ( pCurLstObj->aName < rNewEntry.aName )
88cdf0e10cSrcweir                 return sal_True;
89cdf0e10cSrcweir             if ( !(pCurLstObj->aName == rNewEntry.aName) )
90cdf0e10cSrcweir                 return sal_False;
91cdf0e10cSrcweir             break;
92cdf0e10cSrcweir 
93cdf0e10cSrcweir         case  FSYS_SORT_EXT:
94cdf0e10cSrcweir         case (FSYS_SORT_EXT | FSYS_SORT_ASCENDING):
95cdf0e10cSrcweir         {
96cdf0e10cSrcweir             if ( pCurLstObj->GetExtension() > rNewEntry.GetExtension() )
97cdf0e10cSrcweir                 return sal_True;
98cdf0e10cSrcweir             if ( !(pCurLstObj->GetExtension() == rNewEntry.GetExtension()) )
99cdf0e10cSrcweir                 return sal_False;
100cdf0e10cSrcweir             break;
101cdf0e10cSrcweir         }
102cdf0e10cSrcweir         case (FSYS_SORT_EXT | FSYS_SORT_DESCENDING):
103cdf0e10cSrcweir         {
104cdf0e10cSrcweir             if ( pCurLstObj->GetExtension() < rNewEntry.GetExtension() )
105cdf0e10cSrcweir                 return sal_True;
106cdf0e10cSrcweir             if ( !(pCurLstObj->GetExtension() == rNewEntry.GetExtension()) )
107cdf0e10cSrcweir                 return sal_False;
108cdf0e10cSrcweir             break;
109cdf0e10cSrcweir         }
110cdf0e10cSrcweir 
111cdf0e10cSrcweir         case  FSYS_SORT_KIND:
112cdf0e10cSrcweir         case (FSYS_SORT_KIND | FSYS_SORT_ASCENDING ):
113cdf0e10cSrcweir             if ( VALUE(pOldStat->nKindFlags) > VALUE(rNewStat.nKindFlags) )
114cdf0e10cSrcweir                 return sal_True;
115cdf0e10cSrcweir             if ( !(VALUE(pOldStat->nKindFlags) == VALUE(rNewStat.nKindFlags)) )
116cdf0e10cSrcweir                 return sal_False;
117cdf0e10cSrcweir             break;
118cdf0e10cSrcweir         case (FSYS_SORT_KIND | FSYS_SORT_DESCENDING):
119cdf0e10cSrcweir             if ( VALUE(pOldStat->nKindFlags) < VALUE(rNewStat.nKindFlags) )
120cdf0e10cSrcweir                 return sal_True;
121cdf0e10cSrcweir             if ( !(VALUE(pOldStat->nKindFlags) == VALUE(rNewStat.nKindFlags)) )
122cdf0e10cSrcweir                 return sal_False;
123cdf0e10cSrcweir             break;
124cdf0e10cSrcweir 
125cdf0e10cSrcweir         case  FSYS_SORT_SIZE:
126cdf0e10cSrcweir         case (FSYS_SORT_SIZE | FSYS_SORT_ASCENDING):
127cdf0e10cSrcweir             if ( pOldStat->nSize > rNewStat.nSize )
128cdf0e10cSrcweir                 return sal_True;
129cdf0e10cSrcweir             if ( !(pOldStat->nSize == rNewStat.nSize) )
130cdf0e10cSrcweir                 return sal_False;
131cdf0e10cSrcweir             break;
132cdf0e10cSrcweir         case (FSYS_SORT_SIZE | FSYS_SORT_DESCENDING):
133cdf0e10cSrcweir             if ( pOldStat->nSize < rNewStat.nSize )
134cdf0e10cSrcweir                 return sal_True;
135cdf0e10cSrcweir             if ( !(pOldStat->nSize == rNewStat.nSize) )
136cdf0e10cSrcweir                 return sal_False;
137cdf0e10cSrcweir             break;
138cdf0e10cSrcweir 
139cdf0e10cSrcweir         case  FSYS_SORT_MODIFYED:
140cdf0e10cSrcweir         case (FSYS_SORT_MODIFYED | FSYS_SORT_ASCENDING):
141cdf0e10cSrcweir             if ( (pOldStat->aDateModified >= rNewStat.aDateModified) &&
142cdf0e10cSrcweir                  (pOldStat->aTimeModified >  rNewStat.aTimeModified) )
143cdf0e10cSrcweir                  return sal_True;
144cdf0e10cSrcweir             if ( !((pOldStat->aDateModified == rNewStat.aDateModified) &&
145cdf0e10cSrcweir                    (pOldStat->aTimeModified == rNewStat.aTimeModified)) )
146cdf0e10cSrcweir                 return sal_False;
147cdf0e10cSrcweir             break;
148cdf0e10cSrcweir         case (FSYS_SORT_MODIFYED | FSYS_SORT_DESCENDING):
149cdf0e10cSrcweir             if ( (pOldStat->aDateModified <= rNewStat.aDateModified) &&
150cdf0e10cSrcweir                  (pOldStat->aTimeModified <  rNewStat.aTimeModified) )
151cdf0e10cSrcweir                  return sal_True;
152cdf0e10cSrcweir             if ( !((pOldStat->aDateModified == rNewStat.aDateModified) &&
153cdf0e10cSrcweir                    (pOldStat->aTimeModified == rNewStat.aTimeModified)) )
154cdf0e10cSrcweir                 return sal_False;
155cdf0e10cSrcweir             break;
156cdf0e10cSrcweir 
157cdf0e10cSrcweir         case  FSYS_SORT_CREATED:
158cdf0e10cSrcweir         case (FSYS_SORT_CREATED | FSYS_SORT_ASCENDING):
159cdf0e10cSrcweir             if ( (pOldStat->aDateCreated >= rNewStat.aDateCreated) &&
160cdf0e10cSrcweir                  (pOldStat->aTimeCreated >  rNewStat.aTimeCreated) )
161cdf0e10cSrcweir                  return sal_True;
162cdf0e10cSrcweir             if ( !((pOldStat->aDateCreated == rNewStat.aDateCreated) &&
163cdf0e10cSrcweir                    (pOldStat->aTimeCreated == rNewStat.aTimeCreated)) )
164cdf0e10cSrcweir                 return sal_False;
165cdf0e10cSrcweir             break;
166cdf0e10cSrcweir         case (FSYS_SORT_CREATED | FSYS_SORT_DESCENDING):
167cdf0e10cSrcweir             if ( (pOldStat->aDateCreated <= rNewStat.aDateCreated) &&
168cdf0e10cSrcweir                  (pOldStat->aTimeCreated <  rNewStat.aTimeCreated) )
169cdf0e10cSrcweir                  return sal_True;
170cdf0e10cSrcweir             if ( !((pOldStat->aDateCreated == rNewStat.aDateCreated) &&
171cdf0e10cSrcweir                    (pOldStat->aTimeCreated == rNewStat.aTimeCreated)) )
172cdf0e10cSrcweir                 return sal_False;
173cdf0e10cSrcweir             break;
174cdf0e10cSrcweir 
175cdf0e10cSrcweir         case  FSYS_SORT_ACCESSED:
176cdf0e10cSrcweir         case (FSYS_SORT_ACCESSED | FSYS_SORT_ASCENDING):
177cdf0e10cSrcweir             if ( (pOldStat->aDateAccessed >= rNewStat.aDateAccessed) &&
178cdf0e10cSrcweir                  (pOldStat->aTimeAccessed >  rNewStat.aTimeAccessed) )
179cdf0e10cSrcweir                  return sal_True;
180cdf0e10cSrcweir             if ( !((pOldStat->aDateAccessed == rNewStat.aDateAccessed) &&
181cdf0e10cSrcweir                    (pOldStat->aTimeAccessed == rNewStat.aTimeAccessed)) )
182cdf0e10cSrcweir                 return sal_False;
183cdf0e10cSrcweir             break;
184cdf0e10cSrcweir         case (FSYS_SORT_ACCESSED | FSYS_SORT_DESCENDING):
185cdf0e10cSrcweir             if ( (pOldStat->aDateAccessed <= rNewStat.aDateAccessed) &&
186cdf0e10cSrcweir                  (pOldStat->aTimeAccessed <  rNewStat.aTimeAccessed) )
187cdf0e10cSrcweir                  return sal_True;
188cdf0e10cSrcweir             if ( !((pOldStat->aDateAccessed == rNewStat.aDateAccessed) &&
189cdf0e10cSrcweir                    (pOldStat->aTimeAccessed == rNewStat.aTimeAccessed)) )
190cdf0e10cSrcweir                 return sal_False;
191cdf0e10cSrcweir             break;
192cdf0e10cSrcweir         default: /* Kann nicht sein */;
193cdf0e10cSrcweir     }
194cdf0e10cSrcweir 
195cdf0e10cSrcweir     if ( nSortIndex == ( pSortLst->Count() - 1 ) )
196cdf0e10cSrcweir         return sal_True;
197cdf0e10cSrcweir     else
198cdf0e10cSrcweir         //Rekursion
199cdf0e10cSrcweir         return ImpInsertPointReached( rNewEntry, rNewStat,
200cdf0e10cSrcweir                                       nCurPos, nSortIndex + 1 );
201cdf0e10cSrcweir #undef VALUE
202cdf0e10cSrcweir }
203cdf0e10cSrcweir 
204cdf0e10cSrcweir /*************************************************************************
205cdf0e10cSrcweir |*
206cdf0e10cSrcweir |*    Dir::ImpSortedInsert()
207cdf0e10cSrcweir |*
208cdf0e10cSrcweir |*    Beschreibung      fuegt sortiert ein
209cdf0e10cSrcweir |*    Ersterstellung    MA 05.11.91
210cdf0e10cSrcweir |*    Letzte Aenderung  MA 03.12.91
211cdf0e10cSrcweir |*
212cdf0e10cSrcweir *************************************************************************/
213cdf0e10cSrcweir 
ImpSortedInsert(const DirEntry * pNewEntry,const FileStat * pNewStat)214cdf0e10cSrcweir void Dir::ImpSortedInsert( const DirEntry *pNewEntry, const FileStat *pNewStat )
215cdf0e10cSrcweir {
216cdf0e10cSrcweir     //Sonderfall, keine Sortierung gewuenscht.
217cdf0e10cSrcweir     if ( !pSortLst ) {
218cdf0e10cSrcweir         pLst->Insert( (DirEntry*)pNewEntry, APPEND );
219cdf0e10cSrcweir         return;
220cdf0e10cSrcweir     }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir     pLst->First();
223cdf0e10cSrcweir     do {
224cdf0e10cSrcweir         if ( ImpInsertPointReached( *pNewEntry, *pNewStat, pLst->GetCurPos(),
225cdf0e10cSrcweir                                     (sal_uIntPtr)0  ) )
226cdf0e10cSrcweir         {
227cdf0e10cSrcweir             if ( pStatLst )
228cdf0e10cSrcweir                 pStatLst->Insert( (FileStat*)pNewStat, pLst->GetCurPos() );
229cdf0e10cSrcweir             pLst->Insert( (DirEntry*)pNewEntry );
230cdf0e10cSrcweir             return;
231cdf0e10cSrcweir         }
232cdf0e10cSrcweir     } while( pLst->Next() );
233cdf0e10cSrcweir 
234cdf0e10cSrcweir     if ( pStatLst )
235cdf0e10cSrcweir         pStatLst->Insert( (FileStat*)pNewStat, APPEND );
236cdf0e10cSrcweir     pLst->Insert( (DirEntry*)pNewEntry, APPEND );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir /*************************************************************************
240cdf0e10cSrcweir |*
241cdf0e10cSrcweir |*    Dir::Construct()
242cdf0e10cSrcweir |*
243cdf0e10cSrcweir |*    Beschreibung      gemeinsame Implementation der Ctoren
244cdf0e10cSrcweir |*    Ersterstellung    MI 02.06.93
245cdf0e10cSrcweir |*    Letzte Aenderung  MI 02.06.93
246cdf0e10cSrcweir |*
247cdf0e10cSrcweir *************************************************************************/
248cdf0e10cSrcweir 
Construct(DirEntryKind nKindFlags)249cdf0e10cSrcweir void Dir::Construct( DirEntryKind nKindFlags )
250cdf0e10cSrcweir {
251cdf0e10cSrcweir     pLst     = NULL;
252cdf0e10cSrcweir     pSortLst = NULL;
253cdf0e10cSrcweir     pStatLst = NULL;
254cdf0e10cSrcweir     eAttrMask = nKindFlags;
255cdf0e10cSrcweir     ByteString aTempName( GetName(), osl_getThreadTextEncoding() );
256cdf0e10cSrcweir     if ( aTempName.Search( "*" ) != STRING_NOTFOUND ||
257cdf0e10cSrcweir          aTempName.Search( "?" ) != STRING_NOTFOUND )
258cdf0e10cSrcweir #if defined( WNT ) && !defined( WTC )
259cdf0e10cSrcweir     {
260cdf0e10cSrcweir         ByteString aTStr(CutName(), osl_getThreadTextEncoding());
261cdf0e10cSrcweir         char* pBuffer = new char[aTStr.Len()+1];
262cdf0e10cSrcweir         strcpy( pBuffer, aTStr.GetBuffer() );
263cdf0e10cSrcweir         CharLowerBuff( pBuffer, aTStr.Len() );
264cdf0e10cSrcweir         aNameMask = WildCard( String(pBuffer, osl_getThreadTextEncoding()), ';' );
265cdf0e10cSrcweir         delete [] pBuffer;
266cdf0e10cSrcweir     }
267cdf0e10cSrcweir #else
268cdf0e10cSrcweir     aNameMask = WildCard( CutName(), ';' );
269cdf0e10cSrcweir #endif
270cdf0e10cSrcweir     else
271cdf0e10cSrcweir         aNameMask = String("*", osl_getThreadTextEncoding());
272cdf0e10cSrcweir }
273cdf0e10cSrcweir 
274cdf0e10cSrcweir /*************************************************************************
275cdf0e10cSrcweir |*
276cdf0e10cSrcweir |*    Dir::Update()
277cdf0e10cSrcweir |*
278cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
279cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
280cdf0e10cSrcweir |*    Letzte Aenderung  MI 19.09.96
281cdf0e10cSrcweir |*
282cdf0e10cSrcweir *************************************************************************/
283cdf0e10cSrcweir 
Update()284cdf0e10cSrcweir sal_Bool Dir::Update()
285cdf0e10cSrcweir {
286cdf0e10cSrcweir 	Reset();
287cdf0e10cSrcweir 	return Scan( USHRT_MAX ) > 0;
288cdf0e10cSrcweir }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir /*************************************************************************
291cdf0e10cSrcweir |*
292cdf0e10cSrcweir |*    Dir::Reset()
293cdf0e10cSrcweir |*
294cdf0e10cSrcweir |*    Beschreibung
295cdf0e10cSrcweir |*    Ersterstellung    MI 22.10.96
296cdf0e10cSrcweir |*    Letzte Aenderung  MI 22.10.96
297cdf0e10cSrcweir |*
298cdf0e10cSrcweir *************************************************************************/
299cdf0e10cSrcweir 
Reset()300cdf0e10cSrcweir void Dir::Reset()
301cdf0e10cSrcweir {
302cdf0e10cSrcweir 	// ggf. alten Reader l"oschen
303cdf0e10cSrcweir 	if ( pReader && pReader->bInUse )
304cdf0e10cSrcweir 		DELETEZ(pReader);
305cdf0e10cSrcweir 
306cdf0e10cSrcweir 	// alle DirEntries aus der Liste entfernen und deren Speicher freigeben
307cdf0e10cSrcweir 	if ( pLst )
308cdf0e10cSrcweir 	{
309cdf0e10cSrcweir 		DirEntry* pEntry = pLst->First();
310cdf0e10cSrcweir 		while (pEntry)
311cdf0e10cSrcweir 		{
312cdf0e10cSrcweir 			DirEntry* pNext = pLst->Next();
313cdf0e10cSrcweir 			delete pEntry;
314cdf0e10cSrcweir 			pEntry = pNext;
315cdf0e10cSrcweir 		}
316cdf0e10cSrcweir 		pLst->Clear();
317cdf0e10cSrcweir 	}
318cdf0e10cSrcweir 	else
319cdf0e10cSrcweir 		pLst = new DirEntryList();
320cdf0e10cSrcweir 
321cdf0e10cSrcweir 	//	Alte File-Stat's Loeschen
322cdf0e10cSrcweir 	if ( pStatLst )
323cdf0e10cSrcweir 	{
324cdf0e10cSrcweir 		//Erstmal die alten Loeschen
325cdf0e10cSrcweir 		FileStat* pEntry = pStatLst->First();
326cdf0e10cSrcweir 		while (pEntry)
327cdf0e10cSrcweir 		{
328cdf0e10cSrcweir 			FileStat*  pNext = pStatLst->Next();
329cdf0e10cSrcweir 			delete pEntry;
330cdf0e10cSrcweir 			pEntry = pNext;
331cdf0e10cSrcweir 		}
332cdf0e10cSrcweir 		pStatLst->Clear();
333cdf0e10cSrcweir 		delete pStatLst;
334cdf0e10cSrcweir 	}
335cdf0e10cSrcweir 
336cdf0e10cSrcweir 	// Verlangen die Sortierkriterien FileStat's?
337cdf0e10cSrcweir 	if ( pSortLst )
338cdf0e10cSrcweir 	{
339cdf0e10cSrcweir 		pSortLst->First();
340cdf0e10cSrcweir 		do
341cdf0e10cSrcweir 		{
342cdf0e10cSrcweir 			if ( *( pSortLst->GetCurObject() ) &
343cdf0e10cSrcweir 					( FSYS_SORT_KIND | FSYS_SORT_SIZE |
344cdf0e10cSrcweir 					FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_ACCESSED ) )
345cdf0e10cSrcweir 				pStatLst = new FileStatList();
346cdf0e10cSrcweir 		} while ( !pStatLst && pSortLst->Next() );
347cdf0e10cSrcweir 	}
348cdf0e10cSrcweir 
349cdf0e10cSrcweir #ifndef BOOTSTRAP
350cdf0e10cSrcweir 	// ggf. einen neuen Reader aufsetzen
351cdf0e10cSrcweir 	if ( !pReader )
352cdf0e10cSrcweir 		pReader = new DirReader_Impl( *this );
353cdf0e10cSrcweir #endif
354cdf0e10cSrcweir 
355cdf0e10cSrcweir 	// gibt es das zu oeffnende Verzeichnis ueberhaupt?
356cdf0e10cSrcweir #if !defined(UNX) && !defined(OS2) //explanation: see DirReader_Impl::Read() in unx.cxx
357cdf0e10cSrcweir 	if( !pReader->pDosDir )
358cdf0e10cSrcweir 	{
359cdf0e10cSrcweir 		nError = FSYS_ERR_NOTADIRECTORY;
360cdf0e10cSrcweir 		DELETEZ( pReader );
361cdf0e10cSrcweir 		return;
362cdf0e10cSrcweir 	}
363cdf0e10cSrcweir #endif
364cdf0e10cSrcweir }
365cdf0e10cSrcweir 
366cdf0e10cSrcweir /*************************************************************************
367cdf0e10cSrcweir |*
368cdf0e10cSrcweir |*    Dir::Scan()
369cdf0e10cSrcweir |*
370cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
371cdf0e10cSrcweir |*    Ersterstellung    MI 18.09.96
372cdf0e10cSrcweir |*    Letzte Aenderung  MI 19.09.96
373cdf0e10cSrcweir |*
374cdf0e10cSrcweir *************************************************************************/
375cdf0e10cSrcweir 
Scan(sal_uInt16 nCount)376cdf0e10cSrcweir sal_uInt16 Dir::Scan( sal_uInt16 nCount )
377cdf0e10cSrcweir {
378cdf0e10cSrcweir 
379cdf0e10cSrcweir 	sal_uInt16 nRead = 0; // Anzahl in dieser Runde gelesener Eintr"age
380cdf0e10cSrcweir 	FSysFailOnErrorImpl();
381cdf0e10cSrcweir 
382cdf0e10cSrcweir 	// noch nicht fertig gewesen
383cdf0e10cSrcweir 	if ( pReader )
384cdf0e10cSrcweir 	{
385cdf0e10cSrcweir 		// frischer Reader?
386cdf0e10cSrcweir 		if ( !pLst->Count() )
387cdf0e10cSrcweir 		{
388cdf0e10cSrcweir 			// dann ggf. Laufwerke scannen
389cdf0e10cSrcweir 			pReader->bInUse = sal_True;
390cdf0e10cSrcweir 			nRead = pReader->Init();
391cdf0e10cSrcweir 		}
392cdf0e10cSrcweir 
393cdf0e10cSrcweir 		// weiterlesen...
394cdf0e10cSrcweir 		while ( nRead <= nCount && !pReader->bReady )
395cdf0e10cSrcweir 			nRead = nRead + pReader->Read();
396cdf0e10cSrcweir 
397cdf0e10cSrcweir 		// fertig?
398cdf0e10cSrcweir 		if ( pReader && pReader->bReady )
399cdf0e10cSrcweir 			DELETEZ( pReader );
400cdf0e10cSrcweir 	}
401cdf0e10cSrcweir 
402cdf0e10cSrcweir 	// Anzahl der gelesenen zur"uckgeben
403cdf0e10cSrcweir 	return nRead;
404cdf0e10cSrcweir }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir /*************************************************************************
407cdf0e10cSrcweir |*
408cdf0e10cSrcweir |*    Dir::Dir()
409cdf0e10cSrcweir |*
410cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
411cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
412cdf0e10cSrcweir |*    Letzte Aenderung  MI 04.03.92
413cdf0e10cSrcweir |*
414cdf0e10cSrcweir *************************************************************************/
415cdf0e10cSrcweir 
Dir(const DirEntry & rDirEntry,DirEntryKind nKindFlags,FSysSort nSort,...)416cdf0e10cSrcweir Dir::Dir( const DirEntry& rDirEntry, DirEntryKind nKindFlags, FSysSort nSort, ... ):
417cdf0e10cSrcweir     DirEntry( rDirEntry ),
418cdf0e10cSrcweir 	pReader( 0 )
419cdf0e10cSrcweir {
420cdf0e10cSrcweir     DBG_CTOR( Dir, NULL );
421cdf0e10cSrcweir 
422cdf0e10cSrcweir     Construct( nKindFlags );
423cdf0e10cSrcweir 
424cdf0e10cSrcweir     std::va_list pArgs;
425cdf0e10cSrcweir     va_start( pArgs, nSort );
426cdf0e10cSrcweir     ImpSetSort( pArgs, nSort );
427cdf0e10cSrcweir 
428cdf0e10cSrcweir 	Reset();
429cdf0e10cSrcweir }
430cdf0e10cSrcweir 
431cdf0e10cSrcweir /*************************************************************************
432cdf0e10cSrcweir |*
433cdf0e10cSrcweir |*    Dir::Dir()
434cdf0e10cSrcweir |*
435cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
436cdf0e10cSrcweir |*    Ersterstellung    MI 02.06.93
437cdf0e10cSrcweir |*    Letzte Aenderung  MI 02.06.93
438cdf0e10cSrcweir |*
439cdf0e10cSrcweir *************************************************************************/
440cdf0e10cSrcweir 
Dir(const DirEntry & rDirEntry,DirEntryKind nKindFlags)441cdf0e10cSrcweir Dir::Dir( const DirEntry& rDirEntry, DirEntryKind nKindFlags ):
442cdf0e10cSrcweir     DirEntry( rDirEntry ),
443cdf0e10cSrcweir 	pReader( 0 )
444cdf0e10cSrcweir {
445cdf0e10cSrcweir     DBG_CTOR( Dir, NULL );
446cdf0e10cSrcweir 
447cdf0e10cSrcweir     Construct( nKindFlags );
448cdf0e10cSrcweir     Reset();
449cdf0e10cSrcweir }
450cdf0e10cSrcweir 
451cdf0e10cSrcweir /*************************************************************************
452cdf0e10cSrcweir |*
453cdf0e10cSrcweir |*    Dir::Dir()
454cdf0e10cSrcweir |*
455cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
456cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
457cdf0e10cSrcweir |*    Letzte Aenderung  MA 04.11.91
458cdf0e10cSrcweir |*
459cdf0e10cSrcweir *************************************************************************/
460cdf0e10cSrcweir 
Dir()461cdf0e10cSrcweir Dir::Dir():
462cdf0e10cSrcweir 	pReader( 0 )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir     DBG_CTOR( Dir, NULL );
465cdf0e10cSrcweir 
466cdf0e10cSrcweir     pLst     = NULL;
467cdf0e10cSrcweir     pSortLst = NULL;
468cdf0e10cSrcweir     pStatLst = NULL;
469cdf0e10cSrcweir     eAttrMask = FSYS_KIND_ALL;
470cdf0e10cSrcweir     aNameMask = String("*", osl_getThreadTextEncoding());
471cdf0e10cSrcweir }
472cdf0e10cSrcweir 
473cdf0e10cSrcweir /*************************************************************************
474cdf0e10cSrcweir |*
475cdf0e10cSrcweir |*    Dir::~Dir()
476cdf0e10cSrcweir |*
477cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
478cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
479cdf0e10cSrcweir |*    Letzte Aenderung  MA 04.11.91
480cdf0e10cSrcweir |*
481cdf0e10cSrcweir *************************************************************************/
482cdf0e10cSrcweir 
~Dir()483cdf0e10cSrcweir Dir::~Dir()
484cdf0e10cSrcweir {
485cdf0e10cSrcweir     DBG_DTOR( Dir, NULL );
486cdf0e10cSrcweir 
487cdf0e10cSrcweir     // alle DirEntries aus der Liste entfernen und deren Speicher freigeben
488cdf0e10cSrcweir     if ( pLst )
489cdf0e10cSrcweir     {
490cdf0e10cSrcweir 		DirEntry* pEntry = pLst->First();
491cdf0e10cSrcweir 		while (pEntry)
492cdf0e10cSrcweir 		{
493cdf0e10cSrcweir 			DirEntry* pNext = pLst->Next();
494cdf0e10cSrcweir 			delete pEntry;
495cdf0e10cSrcweir 			pEntry = pNext;
496cdf0e10cSrcweir 		}
497cdf0e10cSrcweir 		pLst->Clear();
498cdf0e10cSrcweir 
499cdf0e10cSrcweir         delete pLst;
500cdf0e10cSrcweir     }
501cdf0e10cSrcweir 
502cdf0e10cSrcweir     // alle Sorts aus der Liste entfernen und deren Speicher freigeben
503cdf0e10cSrcweir     if ( pSortLst )
504cdf0e10cSrcweir     {
505cdf0e10cSrcweir 		FSysSort* pEntry = pSortLst->First();
506cdf0e10cSrcweir 		while (pEntry)
507cdf0e10cSrcweir 		{
508cdf0e10cSrcweir 			FSysSort*  pNext = pSortLst->Next();
509cdf0e10cSrcweir 			delete pEntry;
510cdf0e10cSrcweir 			pEntry = pNext;
511cdf0e10cSrcweir 		}
512cdf0e10cSrcweir 		pSortLst->Clear();
513cdf0e10cSrcweir 
514cdf0e10cSrcweir         delete pSortLst;
515cdf0e10cSrcweir     }
516cdf0e10cSrcweir 
517cdf0e10cSrcweir     // alle FileStat's aus der Liste entfernen und deren Speicher freigeben
518cdf0e10cSrcweir     if ( pStatLst )
519cdf0e10cSrcweir     {
520cdf0e10cSrcweir 		FileStat* pEntry = pStatLst->First();
521cdf0e10cSrcweir 		while (pEntry)
522cdf0e10cSrcweir 		{
523cdf0e10cSrcweir 			FileStat*  pNext = pStatLst->Next();
524cdf0e10cSrcweir 			delete pEntry;
525cdf0e10cSrcweir 			pEntry = pNext;
526cdf0e10cSrcweir 		}
527cdf0e10cSrcweir 		pStatLst->Clear();
528cdf0e10cSrcweir         delete pStatLst;
529cdf0e10cSrcweir     }
530cdf0e10cSrcweir 
531cdf0e10cSrcweir 	// ggf. laufenden Reader freigeben
532cdf0e10cSrcweir 	delete pReader;
533cdf0e10cSrcweir }
534cdf0e10cSrcweir 
535cdf0e10cSrcweir /*************************************************************************
536cdf0e10cSrcweir |*
537cdf0e10cSrcweir |*    Dir::ImpSetSort()
538cdf0e10cSrcweir |*
539cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
540cdf0e10cSrcweir |*    Ersterstellung    MA 04.11.91
541cdf0e10cSrcweir |*    Letzte Aenderung  MI 05.02.92
542cdf0e10cSrcweir |*
543cdf0e10cSrcweir *************************************************************************/
544cdf0e10cSrcweir 
ImpSetSort(std::va_list pArgs,int nFirstSort)545cdf0e10cSrcweir FSysError Dir::ImpSetSort( std::va_list pArgs, int nFirstSort )
546cdf0e10cSrcweir {
547cdf0e10cSrcweir     sal_Bool             bLast;
548cdf0e10cSrcweir     FSysSort        *pSort;
549cdf0e10cSrcweir     FSysSortList    *pNewSortLst = new FSysSortList;
550cdf0e10cSrcweir 
551cdf0e10cSrcweir 	*( pSort = new FSysSort ) = nFirstSort;
552cdf0e10cSrcweir     do
553cdf0e10cSrcweir     {
554cdf0e10cSrcweir 		// letztes Kriterium?
555cdf0e10cSrcweir         bLast = FSYS_SORT_END == (*pSort & FSYS_SORT_END);
556cdf0e10cSrcweir         *pSort &= ~FSYS_SORT_END;
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 		FSysSort nSort = *pSort & ~(sal_uInt16)FSYS_SORT_ASCENDING
559cdf0e10cSrcweir 							  &  ~(sal_uInt16)FSYS_SORT_DESCENDING;
560cdf0e10cSrcweir 
561cdf0e10cSrcweir 		// g"utliges Sortierkriterium?
562cdf0e10cSrcweir         if ( ( nSort ==  FSYS_SORT_NAME ) ||
563cdf0e10cSrcweir              ( nSort ==  FSYS_SORT_SIZE ) ||
564cdf0e10cSrcweir              ( nSort ==  FSYS_SORT_EXT )  ||
565cdf0e10cSrcweir              ( nSort ==  FSYS_SORT_CREATED ) ||
566cdf0e10cSrcweir              ( nSort ==  FSYS_SORT_MODIFYED ) ||
567cdf0e10cSrcweir              ( nSort ==  FSYS_SORT_ACCESSED ) ||
568cdf0e10cSrcweir 			 ( nSort ==  FSYS_SORT_KIND ) )
569cdf0e10cSrcweir         {
570cdf0e10cSrcweir             pNewSortLst->Insert( pSort, APPEND );
571cdf0e10cSrcweir             *(pSort = new FSysSort) = va_arg( pArgs, FSysSort );
572cdf0e10cSrcweir         }
573cdf0e10cSrcweir         else
574cdf0e10cSrcweir         {   // ungueltiger Sort oder FSYS_SORT_NONE
575cdf0e10cSrcweir 			FSysSort* pEntry = pNewSortLst->First();
576cdf0e10cSrcweir 			while (pEntry)
577cdf0e10cSrcweir 			{
578cdf0e10cSrcweir 				FSysSort* pNext = pNewSortLst->Next();
579cdf0e10cSrcweir 				delete pEntry;
580cdf0e10cSrcweir 				pEntry = pNext;
581cdf0e10cSrcweir 			}
582cdf0e10cSrcweir 			pNewSortLst->Clear();
583cdf0e10cSrcweir             delete pNewSortLst;
584cdf0e10cSrcweir             if ( *pSort ==  FSYS_SORT_NONE )
585cdf0e10cSrcweir 			{
586cdf0e10cSrcweir                 delete pSort;
587cdf0e10cSrcweir                 if ( pSortLst )
588cdf0e10cSrcweir                     delete pSortLst;
589cdf0e10cSrcweir                 return FSYS_ERR_OK;
590cdf0e10cSrcweir             }
591cdf0e10cSrcweir             else
592cdf0e10cSrcweir 			{
593cdf0e10cSrcweir                 delete pSort;
594cdf0e10cSrcweir                 return FSYS_ERR_NOTSUPPORTED;
595cdf0e10cSrcweir             }
596cdf0e10cSrcweir         }
597cdf0e10cSrcweir     } while ( !bLast );
598cdf0e10cSrcweir 
599cdf0e10cSrcweir     va_end( pArgs );
600cdf0e10cSrcweir 	delete pSort;			// JP:6.3.00 - delete the initial pointer
601cdf0e10cSrcweir 
602cdf0e10cSrcweir     //Enfernen der alten Sort-Elemente
603cdf0e10cSrcweir     if ( pSortLst )
604cdf0e10cSrcweir 	{
605cdf0e10cSrcweir 		FSysSort* pEntry = pSortLst->First();
606cdf0e10cSrcweir 		while (pEntry)
607cdf0e10cSrcweir 		{
608cdf0e10cSrcweir 			FSysSort* pNext = pSortLst->Next();
609cdf0e10cSrcweir 			delete pEntry;
610cdf0e10cSrcweir 			pEntry = pNext;
611cdf0e10cSrcweir 		}
612cdf0e10cSrcweir 		pSortLst->Clear();
613cdf0e10cSrcweir 		delete pSortLst;
614cdf0e10cSrcweir 	}
615cdf0e10cSrcweir     pSortLst = pNewSortLst;
616cdf0e10cSrcweir 
617cdf0e10cSrcweir     //Jetzt noch neu Sortieren...
618cdf0e10cSrcweir 
619cdf0e10cSrcweir     //Wenn keine FileStats da sind, aber nun welche gebraucht werden,
620cdf0e10cSrcweir     //ist der Aufruf von Update() die einfachste Moeglichkeit
621cdf0e10cSrcweir     if ( !pStatLst && pSortLst )
622cdf0e10cSrcweir     {
623cdf0e10cSrcweir         pSortLst->First();
624cdf0e10cSrcweir         do
625cdf0e10cSrcweir         {
626cdf0e10cSrcweir             if ( *(pSortLst->GetCurObject()) &
627cdf0e10cSrcweir                   ( FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE |
628cdf0e10cSrcweir                     FSYS_SORT_ACCESSED | FSYS_SORT_KIND ) )
629cdf0e10cSrcweir             {
630cdf0e10cSrcweir                 Update();
631cdf0e10cSrcweir                 return FSYS_ERR_OK;
632cdf0e10cSrcweir             }
633cdf0e10cSrcweir         } while ( !pStatLst && pSortLst->Next() );
634cdf0e10cSrcweir     }
635cdf0e10cSrcweir 
636cdf0e10cSrcweir     if ( pLst ) { //Keine DirEntry's, kein Sort.
637cdf0e10cSrcweir         DirEntryList    *pOldLst = pLst; //alte Liste merken
638cdf0e10cSrcweir         pLst = new DirEntryList();       //neue Liste (zu Sortieren)
639cdf0e10cSrcweir 
640cdf0e10cSrcweir         FileStatList *pOldStatLst = NULL; //alte StatListe merken
641cdf0e10cSrcweir         if ( pStatLst ) {
642cdf0e10cSrcweir             pOldStatLst = pStatLst;
643cdf0e10cSrcweir             pStatLst = new FileStatList(); //neue StatListe (zu Sortieren)
644cdf0e10cSrcweir         }
645cdf0e10cSrcweir         pOldLst->First();
646cdf0e10cSrcweir         do
647cdf0e10cSrcweir         {
648cdf0e10cSrcweir             //Sortiertes Einfuegen der Elemente aus den gemerkten Listen
649cdf0e10cSrcweir             //in die 'richtigen' Listen
650cdf0e10cSrcweir             if ( pOldStatLst )
651cdf0e10cSrcweir                 ImpSortedInsert( pOldLst->GetCurObject(),
652cdf0e10cSrcweir                                  pOldStatLst->GetObject( pOldLst->GetCurPos() ) );
653cdf0e10cSrcweir             else
654cdf0e10cSrcweir                 ImpSortedInsert( pOldLst->GetCurObject(), NULL );
655cdf0e10cSrcweir         } while( pOldLst->Next() );
656cdf0e10cSrcweir 
657cdf0e10cSrcweir         delete pOldLst;
658cdf0e10cSrcweir         if ( pOldStatLst )
659cdf0e10cSrcweir             delete pOldStatLst;
660cdf0e10cSrcweir     }
661cdf0e10cSrcweir     return FSYS_ERR_OK;
662cdf0e10cSrcweir }
663cdf0e10cSrcweir 
664cdf0e10cSrcweir /*************************************************************************
665cdf0e10cSrcweir |*
666cdf0e10cSrcweir |*    Dir::SetSort()
667cdf0e10cSrcweir |*
668cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
669cdf0e10cSrcweir |*    Ersterstellung    MA 04.11.91
670cdf0e10cSrcweir |*    Letzte Aenderung  MI 05.02.92
671cdf0e10cSrcweir |*
672cdf0e10cSrcweir *************************************************************************/
673cdf0e10cSrcweir 
SetSort(FSysSort nSort,...)674cdf0e10cSrcweir FSysError Dir::SetSort( FSysSort nSort, ... )
675cdf0e10cSrcweir {
676cdf0e10cSrcweir     std::va_list pArgs;
677cdf0e10cSrcweir     va_start( pArgs, nSort );
678cdf0e10cSrcweir     return ImpSetSort( pArgs, nSort );
679cdf0e10cSrcweir }
680cdf0e10cSrcweir 
681cdf0e10cSrcweir /*************************************************************************
682cdf0e10cSrcweir |*
683cdf0e10cSrcweir |*    Dir::operator[]()
684cdf0e10cSrcweir |*
685cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
686cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
687cdf0e10cSrcweir |*    Letzte Aenderung  MI 16.05.91
688cdf0e10cSrcweir |*
689cdf0e10cSrcweir *************************************************************************/
690cdf0e10cSrcweir 
operator [](sal_uInt16 nIndex) const691cdf0e10cSrcweir DirEntry& Dir::operator[] ( sal_uInt16 nIndex ) const
692cdf0e10cSrcweir {
693cdf0e10cSrcweir     DBG_ASSERT( nIndex < Count(), "Dir::operator[] : nIndex > Count()" );
694cdf0e10cSrcweir 
695cdf0e10cSrcweir     DirEntry *pEntry = pLst->GetObject( nIndex );
696cdf0e10cSrcweir 	return *pEntry;
697cdf0e10cSrcweir }
698cdf0e10cSrcweir 
699cdf0e10cSrcweir /*************************************************************************
700cdf0e10cSrcweir |*
701cdf0e10cSrcweir |*    Dir::operator+= ()
702cdf0e10cSrcweir |*
703cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
704cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
705cdf0e10cSrcweir |*    Letzte Aenderung  MI 16.05.91
706cdf0e10cSrcweir |*
707cdf0e10cSrcweir *************************************************************************/
708cdf0e10cSrcweir 
operator +=(const Dir & rDir)709cdf0e10cSrcweir Dir& Dir::operator+=( const Dir& rDir )
710cdf0e10cSrcweir {
711cdf0e10cSrcweir 	// ggf. erst den Rest lesen
712cdf0e10cSrcweir 	if ( pReader )
713cdf0e10cSrcweir 		Scan( USHRT_MAX );
714cdf0e10cSrcweir 	DBG_ASSERT( !rDir.pReader, "Dir::+= with incomplete Dir" );
715cdf0e10cSrcweir 
716cdf0e10cSrcweir 	// ggf. initiale Liste erzeugen
717cdf0e10cSrcweir     if ( !pLst )
718cdf0e10cSrcweir         pLst = new DirEntryList();
719cdf0e10cSrcweir 
720cdf0e10cSrcweir     //Verlangen die Sortierkriterien FileStat's?
721cdf0e10cSrcweir     sal_Bool bStat = sal_False;
722cdf0e10cSrcweir     if ( pSortLst ) {
723cdf0e10cSrcweir         pSortLst->First();
724cdf0e10cSrcweir         do {
725cdf0e10cSrcweir             if ( *(pSortLst->GetCurObject()) &
726cdf0e10cSrcweir                   ( FSYS_SORT_CREATED | FSYS_SORT_MODIFYED | FSYS_SORT_SIZE |
727cdf0e10cSrcweir                     FSYS_SORT_ACCESSED | FSYS_SORT_KIND ) )
728cdf0e10cSrcweir                 bStat = sal_True;
729cdf0e10cSrcweir         } while ( !bStat && pSortLst->Next() );
730cdf0e10cSrcweir     }
731cdf0e10cSrcweir     FileStat * stat = NULL;
732cdf0e10cSrcweir     for ( sal_uInt16 nNr = 0; nNr < rDir.Count(); nNr++ )
733cdf0e10cSrcweir     {
734cdf0e10cSrcweir         if ( bStat )
735cdf0e10cSrcweir         {
736cdf0e10cSrcweir             if ( rDir.pStatLst )
737cdf0e10cSrcweir                 stat = new FileStat( *rDir.pStatLst->GetObject(nNr) );
738cdf0e10cSrcweir             else
739cdf0e10cSrcweir                 stat = new FileStat( rDir[nNr] );
740cdf0e10cSrcweir         }
741cdf0e10cSrcweir         ImpSortedInsert( new DirEntry( rDir[nNr] ), stat );
742cdf0e10cSrcweir     }
743cdf0e10cSrcweir     return *this;
744cdf0e10cSrcweir }
745cdf0e10cSrcweir 
746cdf0e10cSrcweir /*************************************************************************
747cdf0e10cSrcweir |*
748cdf0e10cSrcweir |*    Dir::Count()
749cdf0e10cSrcweir |*
750cdf0e10cSrcweir |*    Beschreibung      FSYS.SDW
751cdf0e10cSrcweir |*    Ersterstellung    MI 16.05.91
752cdf0e10cSrcweir |*    Letzte Aenderung  MI 18.09.96
753cdf0e10cSrcweir |*
754cdf0e10cSrcweir *************************************************************************/
755cdf0e10cSrcweir 
756cdf0e10cSrcweir 
Count(sal_Bool bUpdated) const757cdf0e10cSrcweir sal_uInt16 Dir::Count( sal_Bool bUpdated ) const
758cdf0e10cSrcweir {
759cdf0e10cSrcweir 	// ggf. erst den Rest lesen
760cdf0e10cSrcweir 	if ( bUpdated && pReader )
761cdf0e10cSrcweir 		((Dir*)this)->Scan( USHRT_MAX );
762cdf0e10cSrcweir 
763cdf0e10cSrcweir 	return pLst == NULL ? 0 : (sal_uInt16) pLst->Count();
764cdf0e10cSrcweir }
765