xref: /trunk/main/tools/source/stream/strmos2.cxx (revision 89b56da7)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #include <string.h>
25 #include <limits.h>
26 
27 #define INCL_PM
28 #define INCL_DOS
29 #define INCL_DOSERRORS
30 #include <svpm.h>
31 
32 #include <tools/debug.hxx>
33 #include <tools/fsys.hxx>
34 #include <tools/stream.hxx>
35 
36 // class FileBase
37 #include <osl/file.hxx>
38 
39 using namespace osl;
40 
41 // class FileBase
42 #ifndef _OSL_FILE_HXX_
43 #include <osl/file.hxx>
44 #endif
45 
46 using namespace osl;
47 
48 // -----------------------------------------------------------------------
49 
50 // --------------
51 // - StreamData -
52 // --------------
53 
54 class StreamData
55 {
56 public:
57     HFILE   hFile;
58     sal_Bool    bIsEof;
59 
StreamData()60             StreamData()
61             {
62                 hFile = 0;
63                 bIsEof = sal_True;
64             }
65 };
66 
67 // -----------------------------------------------------------------------
68 
GetSvError(APIRET nPMError)69 sal_uIntPtr GetSvError( APIRET nPMError )
70 {
71     static struct { APIRET pm; sal_uIntPtr sv; } errArr[] =
72     {
73         { ERROR_FILE_NOT_FOUND,         SVSTREAM_FILE_NOT_FOUND },
74         { ERROR_PATH_NOT_FOUND,         SVSTREAM_PATH_NOT_FOUND },
75         { ERROR_TOO_MANY_OPEN_FILES,    SVSTREAM_TOO_MANY_OPEN_FILES },
76         { ERROR_ACCESS_DENIED,          SVSTREAM_ACCESS_DENIED },
77         { ERROR_INVALID_ACCESS,         SVSTREAM_INVALID_ACCESS },
78         { ERROR_SHARING_VIOLATION,      SVSTREAM_SHARING_VIOLATION },
79         { ERROR_SHARING_BUFFER_EXCEEDED,SVSTREAM_SHARE_BUFF_EXCEEDED },
80         { ERROR_CANNOT_MAKE,            SVSTREAM_CANNOT_MAKE },
81         { ERROR_INVALID_PARAMETER,      SVSTREAM_INVALID_PARAMETER },
82         { ERROR_DRIVE_LOCKED,           SVSTREAM_LOCKING_VIOLATION },
83         { ERROR_LOCK_VIOLATION,      SVSTREAM_LOCKING_VIOLATION },
84         { ERROR_FILENAME_EXCED_RANGE,   SVSTREAM_INVALID_PARAMETER },
85         { ERROR_ATOMIC_LOCK_NOT_SUPPORTED, SVSTREAM_INVALID_PARAMETER },
86         { ERROR_READ_LOCKS_NOT_SUPPORTED, SVSTREAM_INVALID_PARAMETER },
87 
88 
89         { 0xFFFF, SVSTREAM_GENERALERROR }
90     };
91 
92     sal_uIntPtr nRetVal = SVSTREAM_GENERALERROR;    // Standardfehler
93     int i=0;
94     do
95     {
96         if( errArr[i].pm == nPMError )
97         {
98             nRetVal = errArr[i].sv;
99             break;
100         }
101         i++;
102     }
103     while( errArr[i].pm != 0xFFFF );
104     return nRetVal;
105 }
106 
107 /*************************************************************************
108 |*
109 |*    SvFileStream::SvFileStream()
110 |*
111 |*    Beschreibung      STREAM.SDW
112 |*    Ersterstellung    OV 15.06.94
113 |*    Letzte Aenderung  OV 15.06.94
114 |*
115 *************************************************************************/
116 
SvFileStream(const String & rFileName,StreamMode nOpenMode)117 SvFileStream::SvFileStream( const String& rFileName, StreamMode nOpenMode )
118 {
119     bIsOpen             = sal_False;
120     nLockCounter        = 0;
121     bIsWritable         = sal_False;
122     pInstanceData       = new StreamData;
123 
124     SetBufferSize( 8192 );
125 	// convert URL to SystemPath, if necessary
126 	::rtl::OUString aFileName, aNormPath;
127 
128 	if ( FileBase::getSystemPathFromFileURL( rFileName, aFileName ) != FileBase::E_None )
129 		aFileName = rFileName;
130 	Open( aFileName, nOpenMode );
131 }
132 
133 /*************************************************************************
134 |*
135 |*    SvFileStream::SvFileStream()
136 |*
137 |*    Beschreibung      STREAM.SDW
138 |*    Ersterstellung    OV 22.11.94
139 |*    Letzte Aenderung  OV 22.11.94
140 |*
141 *************************************************************************/
142 
SvFileStream()143 SvFileStream::SvFileStream()
144 {
145     bIsOpen             = sal_False;
146     nLockCounter        = 0;
147     bIsWritable         = sal_False;
148     pInstanceData       = new StreamData;
149     SetBufferSize( 8192 );
150 }
151 
152 /*************************************************************************
153 |*
154 |*    SvFileStream::~SvFileStream()
155 |*
156 |*    Beschreibung      STREAM.SDW
157 |*    Ersterstellung    OV 14.06.94
158 |*    Letzte Aenderung  OV 14.06.94
159 |*
160 *************************************************************************/
161 
~SvFileStream()162 SvFileStream::~SvFileStream()
163 {
164     Close();
165     if( pInstanceData )
166         delete pInstanceData;
167 }
168 
169 /*************************************************************************
170 |*
171 |*    SvFileStream::GetFileHandle()
172 |*
173 |*    Beschreibung      STREAM.SDW
174 |*    Ersterstellung    OV 14.06.94
175 |*    Letzte Aenderung  OV 14.06.94
176 |*
177 *************************************************************************/
178 
GetFileHandle() const179 sal_uIntPtr SvFileStream::GetFileHandle() const
180 {
181     return (sal_uIntPtr)pInstanceData->hFile;
182 }
183 
184 /*************************************************************************
185 |*
186 |*    SvFileStream::IsA()
187 |*
188 |*    Beschreibung      STREAM.SDW
189 |*    Ersterstellung    OV 14.06.94
190 |*    Letzte Aenderung  OV 14.06.94
191 |*
192 *************************************************************************/
193 
IsA() const194 sal_uInt16 SvFileStream::IsA() const
195 {
196     return ID_FILESTREAM;
197 }
198 
199 /*************************************************************************
200 |*
201 |*    SvFileStream::GetData()
202 |*
203 |*    Beschreibung      STREAM.SDW, Prueft nicht Eof; IsEof danach rufbar
204 |*    Ersterstellung    OV 15.06.94
205 |*    Letzte Aenderung  OV 15.06.94
206 |*
207 *************************************************************************/
208 
GetData(void * pData,sal_uIntPtr nSize)209 sal_uIntPtr SvFileStream::GetData( void* pData, sal_uIntPtr nSize )
210 {
211 #ifdef DBG_UTIL
212     ByteString aTraceStr( "SvFileStream::GetData(): " );
213     aTraceStr += ByteString::CreateFromInt64(nSize);
214     aTraceStr += " Bytes from ";
215     aTraceStr += ByteString(aFilename, osl_getThreadTextEncoding());
216     DBG_TRACE( aTraceStr.GetBuffer() );
217 #endif
218 
219     sal_uIntPtr nCount = 0L;
220     if( IsOpen() )
221     {
222         APIRET nResult;
223         nResult = DosRead( pInstanceData->hFile,(PVOID)pData,nSize,&nCount );
224         if( nResult )
225             SetError(::GetSvError(nResult) );
226     }
227     return nCount;
228 }
229 
230 /*************************************************************************
231 |*
232 |*    SvFileStream::PutData()
233 |*
234 |*    Beschreibung      STREAM.SDW
235 |*    Ersterstellung    OV 15.06.94
236 |*    Letzte Aenderung  OV 15.06.94
237 |*
238 *************************************************************************/
239 
PutData(const void * pData,sal_uIntPtr nSize)240 sal_uIntPtr SvFileStream::PutData( const void* pData, sal_uIntPtr nSize )
241 {
242 #ifdef DBG_UTIL
243     ByteString aTraceStr( "SvFileStrean::PutData: " );
244     aTraceStr += ByteString::CreateFromInt64(nSize);
245     aTraceStr += " Bytes to ";
246     aTraceStr += ByteString(aFilename, osl_getThreadTextEncoding());
247     DBG_TRACE( aTraceStr.GetBuffer() );
248 #endif
249 
250     sal_uIntPtr nCount = 0L;
251     if( IsOpen() )
252     {
253         APIRET nResult;
254         nResult = DosWrite( pInstanceData->hFile,(PVOID)pData,nSize,&nCount );
255         if( nResult )
256             SetError(::GetSvError(nResult) );
257         else if( !nCount )
258             SetError( SVSTREAM_DISK_FULL );
259     }
260     return nCount;
261 }
262 
263 /*************************************************************************
264 |*
265 |*    SvFileStream::SeekPos()
266 |*
267 |*    Beschreibung      STREAM.SDW
268 |*    Ersterstellung    OV 15.06.94
269 |*    Letzte Aenderung  OV 15.06.94
270 |*
271 *************************************************************************/
272 
SeekPos(sal_uIntPtr nPos)273 sal_uIntPtr SvFileStream::SeekPos( sal_uIntPtr nPos )
274 {
275     sal_uIntPtr nNewPos = 0L;
276     if( IsOpen() )
277     {
278         APIRET nResult;
279 
280         if( nPos != STREAM_SEEK_TO_END )
281             nResult = DosSetFilePtr( pInstanceData->hFile,(long)nPos,
282                  FILE_BEGIN, &nNewPos );
283         else
284             nResult = DosSetFilePtr( pInstanceData->hFile,0L,
285                  FILE_END, &nNewPos );
286 
287         if( nResult )
288             SetError(::GetSvError(nResult) );
289     }
290     else
291         SetError( SVSTREAM_GENERALERROR );
292     return nNewPos;
293 }
294 
295 /*************************************************************************
296 |*
297 |*    SvFileStream::Tell()
298 |*
299 |*    Beschreibung      STREAM.SDW
300 |*    Ersterstellung    OV 15.06.94
301 |*    Letzte Aenderung  OV 15.06.94
302 |*
303 *************************************************************************/
304 /*
305 sal_uIntPtr SvFileStream::Tell()
306 {
307     sal_uIntPtr nPos = 0L;
308 
309     if( IsOpen() )
310     {
311         APIRET nResult;
312         nResult = DosSetFilePtr(pInstanceData->hFile,0L,FILE_CURRENT,&nPos);
313         if( nResult )
314             SetError(::GetSvError(nResult) );
315     }
316     return nPos;
317 }
318 */
319 
320 /*************************************************************************
321 |*
322 |*    SvFileStream::FlushData()
323 |*
324 |*    Beschreibung      STREAM.SDW
325 |*    Ersterstellung    OV 15.06.94
326 |*    Letzte Aenderung  OV 15.06.94
327 |*
328 *************************************************************************/
329 
FlushData()330 void SvFileStream::FlushData()
331 {
332     if( IsOpen() )
333     {
334         APIRET nResult;
335         nResult = DosResetBuffer(pInstanceData->hFile );
336         if( nResult )
337             SetError(::GetSvError(nResult) );
338     }
339 }
340 
341 /*************************************************************************
342 |*
343 |*    SvFileStream::LockRange()
344 |*
345 |*    Beschreibung      STREAM.SDW
346 |*    Ersterstellung    OV 15.06.94
347 |*    Letzte Aenderung  OV 15.06.94
348 |*
349 *************************************************************************/
350 
LockRange(sal_uIntPtr nByteOffset,sal_uIntPtr nBytes)351 sal_Bool SvFileStream::LockRange( sal_uIntPtr nByteOffset, sal_uIntPtr nBytes )
352 {
353     sal_Bool bRetVal = sal_False;
354     if( IsOpen() )
355     {
356         APIRET   nResult;
357         FILELOCK aLockArea, aUnlockArea;
358         aUnlockArea.lOffset = 0L;
359         aUnlockArea.lRange      = 0L;
360         aLockArea.lOffset       = (long)nByteOffset;
361         aLockArea.lRange        = (long)nBytes;
362 
363         nResult = DosSetFileLocks(pInstanceData->hFile,
364             &aUnlockArea, &aLockArea,
365             1000UL,  // Zeit in ms bis Abbruch
366             0L       // kein Atomic-Lock
367         );
368 
369         if( nResult )
370             SetError(::GetSvError(nResult) );
371         else
372             bRetVal = sal_True;
373     }
374     return bRetVal;
375 }
376 
377 /*************************************************************************
378 |*
379 |*    SvFileStream::UnlockRange()
380 |*
381 |*    Beschreibung      STREAM.SDW
382 |*    Ersterstellung    OV 15.06.94
383 |*    Letzte Aenderung  OV 15.06.94
384 |*
385 *************************************************************************/
386 
UnlockRange(sal_uIntPtr nByteOffset,sal_uIntPtr nBytes)387 sal_Bool SvFileStream::UnlockRange( sal_uIntPtr nByteOffset, sal_uIntPtr nBytes )
388 {
389     sal_Bool bRetVal = sal_False;
390     if( IsOpen() )
391     {
392         APIRET   nResult;
393         FILELOCK aLockArea, aUnlockArea;
394         aLockArea.lOffset       = 0L;
395         aLockArea.lRange        = 0L;
396         aUnlockArea.lOffset = (long)nByteOffset;
397         aUnlockArea.lRange      = (long)nBytes;
398 
399         nResult = DosSetFileLocks(pInstanceData->hFile,
400             &aUnlockArea, &aLockArea,
401             1000UL,  // Zeit in ms bis Abbruch
402             0L       // kein Atomic-Lock
403         );
404 
405         if( nResult )
406             SetError(::GetSvError(nResult) );
407         else
408             bRetVal = sal_True;
409     }
410     return bRetVal;
411 }
412 
413 /*************************************************************************
414 |*
415 |*    SvFileStream::LockFile()
416 |*
417 |*    Beschreibung      STREAM.SDW
418 |*    Ersterstellung    OV 15.06.94
419 |*    Letzte Aenderung  OV 15.06.94
420 |*
421 *************************************************************************/
422 
LockFile()423 sal_Bool SvFileStream::LockFile()
424 {
425     sal_Bool bRetVal = sal_False;
426     if( !nLockCounter )
427     {
428         if( LockRange( 0L, LONG_MAX ) )
429         {
430             nLockCounter = 1;
431             bRetVal = sal_True;
432         }
433     }
434     else
435     {
436         nLockCounter++;
437         bRetVal = sal_True;
438     }
439     return bRetVal;
440 }
441 
442 /*************************************************************************
443 |*
444 |*    SvFileStream::UnlockFile()
445 |*
446 |*    Beschreibung      STREAM.SDW
447 |*    Ersterstellung    OV 15.06.94
448 |*    Letzte Aenderung  OV 15.06.94
449 |*
450 *************************************************************************/
451 
UnlockFile()452 sal_Bool SvFileStream::UnlockFile()
453 {
454     sal_Bool bRetVal = sal_False;
455     if( nLockCounter > 0)
456     {
457         if( nLockCounter == 1)
458         {
459             if( UnlockRange( 0L, LONG_MAX ) )
460             {
461                 nLockCounter = 0;
462                 bRetVal = sal_True;
463             }
464         }
465         else
466         {
467             nLockCounter--;
468             bRetVal = sal_True;
469         }
470     }
471     return bRetVal;
472 }
473 
474 /*************************************************************************
475 |*
476 |*    SvFileStream::Open()
477 |*
478 |*    Beschreibung      STREAM.SDW
479 |*    Ersterstellung    OV 15.06.94
480 |*    Letzte Aenderung  OV 15.06.94
481 |*
482 *************************************************************************/
483 
484 #if 0
485 sal_Bool createLongNameEA   ( const PCSZ pszPath, sal_uIntPtr ulAttributes, const String& aLongName );
486 #endif
487 
Open(const String & rFilename,StreamMode nOpenMode)488 void SvFileStream::Open( const String& rFilename, StreamMode nOpenMode )
489 {
490         String aParsedFilename;
491 
492 #if 0
493         if      ( Folder::IsAvailable() && (rFilename.Search('{') < 9) )
494         {
495                 String          aVirtualPart;
496                 String          aRealPart;
497                 String          aVirtualPath;
498                 ItemIDPath      aVirtualURL;
499                 sal_uIntPtr           nDivider = 0;
500 
501                 String          aVirtualString(rFilename);
502 
503                 for (int x=aVirtualString.Len(); x>0; x--)
504                 {
505                         if (aVirtualString.Copy(x,1).Compare("}")==COMPARE_EQUAL)
506                         {
507                                 nDivider = x;
508                                 break;
509                         }
510                 }
511 
512                 aVirtualPart = aVirtualString.Copy(0,nDivider+1);
513                 aRealPart = aVirtualString.Copy(nDivider+2);
514 
515                 aVirtualURL  = aVirtualPart;
516                 aVirtualPath = aVirtualURL.GetHostNotationPath();
517 
518                 DirEntry aTempDirEntry(aVirtualPath);
519 
520                 aTempDirEntry += aRealPart;
521 
522                 aParsedFilename = aTempDirEntry.GetFull();
523         }
524         else
525 #endif // 0
526         {
527                 aParsedFilename = rFilename;
528         }
529 
530     Close();
531     SvStream::ClearBuffer();
532 
533     sal_uIntPtr   nActionTaken;
534     sal_uIntPtr   nOpenAction     = 0L;
535     sal_uIntPtr   nShareBits      = 0L;
536     sal_uIntPtr   nReadWriteBits  = 0L;
537 
538     eStreamMode = nOpenMode;
539     eStreamMode &= ~STREAM_TRUNC; // beim ReOpen nicht cutten
540 
541     nOpenMode |= STREAM_SHARE_DENYNONE;  // definierten Zustand garantieren
542 
543     // ********* Zugriffsflags ***********
544     if( nOpenMode & STREAM_SHARE_DENYNONE)
545         nShareBits = OPEN_SHARE_DENYNONE;
546 
547     if( nOpenMode & STREAM_SHARE_DENYREAD)
548         nShareBits = OPEN_SHARE_DENYREAD;
549 
550     if( nOpenMode & STREAM_SHARE_DENYWRITE)
551         nShareBits = OPEN_SHARE_DENYWRITE;
552 
553     if( nOpenMode & STREAM_SHARE_DENYALL)
554         nShareBits = OPEN_SHARE_DENYREADWRITE;
555 
556         if( (nOpenMode & STREAM_READ) )
557     {
558         if( nOpenMode & STREAM_WRITE )
559             nReadWriteBits |= OPEN_ACCESS_READWRITE;
560         else
561         {
562             nReadWriteBits |= OPEN_ACCESS_READONLY;
563             nOpenMode |= STREAM_NOCREATE;
564         }
565     }
566     else
567         nReadWriteBits |= OPEN_ACCESS_WRITEONLY;
568 
569 
570     if( nOpenMode & STREAM_NOCREATE )
571     {
572         // Datei nicht erzeugen
573         nOpenAction = OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
574     }
575     else
576     {
577         // Datei erzeugen, wenn nicht vorhanden
578         nOpenAction = OPEN_ACTION_CREATE_IF_NEW;
579         if( nOpenMode & STREAM_TRUNC )
580             // Auf Nullaenge kuerzen, wenn existiert
581             nOpenAction |= OPEN_ACTION_REPLACE_IF_EXISTS;
582         else
583             // Inhalt der Datei nicht wegwerfen
584             nOpenAction |= OPEN_ACTION_OPEN_IF_EXISTS;
585     }
586 
587 #if 0 // YD
588 	//
589 	// resolves long FAT names used by OS2
590 	//
591 	sal_Bool bIsLongOS2=sal_False;
592 	if (Folder::IsAvailable())
593 	{
594 		DirEntry aDirEntry(rFilename);
595 		if  (aDirEntry.IsLongNameOnFAT())
596 		{
597 			// in kurzen Pfad wandeln
598 			ItemIDPath      aItemIDPath(rFilename);
599 			aParsedFilename = aItemIDPath.GetHostNotationPath();
600 			bIsLongOS2 = sal_True;
601 		}
602 	}
603 #endif
604 
605 	aFilename = aParsedFilename;
606 	ByteString aFileNameA( aFilename, gsl_getSystemTextEncoding());
607 	FSysRedirector::DoRedirect( aFilename );
608 
609 #ifdef DBG_UTIL
610 	ByteString aTraceStr( "SvFileStream::Open(): " );
611 	aTraceStr +=  aFileNameA;
612 	DBG_TRACE( aTraceStr.GetBuffer() );
613 #endif
614 
615     APIRET nRet = DosOpen( aFileNameA.GetBuffer(), &pInstanceData->hFile,
616     &nActionTaken, 0L, FILE_NORMAL, nOpenAction,
617     nReadWriteBits | nShareBits | OPEN_FLAGS_NOINHERIT, 0L);
618 
619     if( nRet == ERROR_TOO_MANY_OPEN_FILES )
620     {
621 		long nToAdd = 10;
622 		sal_uIntPtr nCurMaxFH;
623 		nRet = DosSetRelMaxFH( &nToAdd, &nCurMaxFH );
624 		nRet = DosOpen( aFileNameA.GetBuffer(), &pInstanceData->hFile,
625 		&nActionTaken, 0L, FILE_NORMAL, nOpenAction,
626 		nReadWriteBits | nShareBits | OPEN_FLAGS_NOINHERIT, 0L);
627     }
628 
629     // Bei Fehler pruefen, ob wir lesen duerfen
630     if( nRet==ERROR_ACCESS_DENIED || nRet==ERROR_SHARING_VIOLATION )
631     {
632         nReadWriteBits = OPEN_ACCESS_READONLY;
633         nRet = DosOpen( aFileNameA.GetBuffer(), &pInstanceData->hFile,
634             &nActionTaken, 0L, FILE_NORMAL, nOpenAction,
635             nReadWriteBits | nShareBits | OPEN_FLAGS_NOINHERIT, 0L);
636     }
637 
638         if( nRet )
639     {
640         bIsOpen = sal_False;
641         SetError(::GetSvError(nRet) );
642     }
643     else
644     {
645         bIsOpen     = sal_True;
646         pInstanceData->bIsEof = sal_False;
647         if( nReadWriteBits != OPEN_ACCESS_READONLY )
648             bIsWritable = sal_True;
649     }
650 
651 #if 0
652 	if (bIsOpen && bIsLongOS2)
653 	{
654 		//file schlie�en, da sonst createLongName u.U. nicht m�glich
655 		Close();
656 
657 		// erzeugtem File langen Namen geben
658 		DirEntry aDirEntry(rFilename);
659 		createLongNameEA(aFileNameA.GetBuffer(),  FILE_NORMAL, aDirEntry.GetName());
660 
661 		// und wieder oeffnen
662 		ReOpen();
663 	}
664 #endif
665 
666 }
667 
668 /*************************************************************************
669 |*
670 |*    SvFileStream::ReOpen()
671 |*
672 |*    Beschreibung      STREAM.SDW
673 |*    Ersterstellung    OV 15.06.94
674 |*    Letzte Aenderung  OV 15.06.94
675 |*
676 *************************************************************************/
677 
ReOpen()678 void SvFileStream::ReOpen()
679 {
680     if( !bIsOpen && aFilename.Len() )
681         Open( aFilename, eStreamMode );
682 }
683 
684 /*************************************************************************
685 |*
686 |*    SvFileStream::Close()
687 |*
688 |*    Beschreibung      STREAM.SDW
689 |*    Ersterstellung    OV 15.06.94
690 |*    Letzte Aenderung  OV 15.06.94
691 |*
692 *************************************************************************/
693 
Close()694 void SvFileStream::Close()
695 {
696     if( IsOpen() )
697     {
698 #ifdef DBG_UTIL
699         ByteString aTraceStr( "SvFileStream::Close(): " );
700         aTraceStr += ByteString(aFilename, osl_getThreadTextEncoding());
701         DBG_TRACE( aTraceStr.GetBuffer() );
702 #endif
703 
704         if( nLockCounter )
705         {
706             nLockCounter = 1;
707             UnlockFile();
708         }
709         Flush();
710         DosClose( pInstanceData->hFile );
711     }
712 
713     bIsOpen     = sal_False;
714     nLockCounter= 0;
715     bIsWritable = sal_False;
716     pInstanceData->bIsEof = sal_True;
717     SvStream::ClearBuffer();
718     SvStream::ClearError();
719 }
720 
721 /*************************************************************************
722 |*
723 |*    SvFileStream::ResetError()
724 |*
725 |*    Beschreibung      STREAM.SDW; Setzt Filepointer auf Dateianfang
726 |*    Ersterstellung    OV 15.06.94
727 |*    Letzte Aenderung  OV 15.06.94
728 |*
729 *************************************************************************/
730 
ResetError()731 void SvFileStream::ResetError()
732 {
733     SvStream::ClearError();
734 }
735 
736 /*************************************************************************
737 |*
738 |*    SvFileStream::SetSize()
739 |*
740 |*    Beschreibung
741 |*    Ersterstellung    OV 19.10.95
742 |*    Letzte Aenderung  OV 19.10.95
743 |*
744 *************************************************************************/
745 
SetSize(sal_uIntPtr nSize)746 void SvFileStream::SetSize( sal_uIntPtr nSize )
747 {
748     if( IsOpen() )
749     {
750         APIRET nRet = DosSetFileSize( pInstanceData->hFile, nSize );
751         if( nRet )
752             SetError( ::GetSvError( nRet ) );
753     }
754 }
755