mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 18:24:19 +02:00
* more compatibility fixes for objects unit
This commit is contained in:
parent
88b1b352d1
commit
4cfe3217c0
@ -980,6 +980,10 @@ END;
|
||||
|
||||
CONSTRUCTOR TStream.Init;
|
||||
BEGIN
|
||||
Status := StOK;
|
||||
ErrorInfo := 0;
|
||||
StreamSize := 0;
|
||||
Position := 0;
|
||||
TPCompatible := DefaultTPCompatible;
|
||||
END;
|
||||
|
||||
@ -1073,7 +1077,7 @@ END;
|
||||
{---------------------------------------------------------------------------}
|
||||
PROCEDURE TStream.Reset;
|
||||
BEGIN
|
||||
Status := 0; { Clear status }
|
||||
Status := stOK; { Clear status }
|
||||
ErrorInfo := 0; { Clear error info }
|
||||
END;
|
||||
|
||||
@ -1390,23 +1394,29 @@ PROCEDURE TDosStream.Read (Var Buf; Count: Sw_Word);
|
||||
VAR BytesMoved: Sw_Word;
|
||||
DosStreamError : Word;
|
||||
BEGIN
|
||||
{ Assume status is StOK }
|
||||
Status := StOk;
|
||||
If (Position + Count > StreamSize) Then { Insufficient data }
|
||||
Error(stReadError, 0); { Read beyond end!!! }
|
||||
If (Handle = InvalidHandle) Then
|
||||
Error(stReadError, 103); { File not open }
|
||||
BlockRead(FileInfo, Buf, Count, BytesMoved); { Read from file }
|
||||
DosStreamError := IOResult;
|
||||
If ((DosStreamError<>0) OR (BytesMoved<>Count)) Then
|
||||
Begin { Error was detected }
|
||||
BytesMoved := 0; { Clear bytes moved }
|
||||
If (DosStreamError <> 0) Then
|
||||
Error(stReadError, DosStreamError) { Specific read error }
|
||||
Else Error(stReadError, 0); { Non specific error }
|
||||
If Status = StOK then
|
||||
Begin
|
||||
If (Position + Count > StreamSize) Then { Insufficient data }
|
||||
Error(stReadError, 0); { Read beyond end!!! }
|
||||
If (Handle = InvalidHandle) Then
|
||||
Error(stReadError, 103); { File not open }
|
||||
BlockRead(FileInfo, Buf, Count, BytesMoved); { Read from file }
|
||||
DosStreamError := IOResult;
|
||||
If ((DosStreamError<>0) OR (BytesMoved<>Count)) Then
|
||||
Begin { Error was detected }
|
||||
BytesMoved := 0; { Clear bytes moved }
|
||||
If (DosStreamError <> 0) Then
|
||||
Error(stReadError, DosStreamError) { Specific read error }
|
||||
Else
|
||||
Error(stReadError, 0); { Non specific error }
|
||||
End;
|
||||
Inc(Position, BytesMoved); { Adjust position }
|
||||
End;
|
||||
{ If there was already an error, or an error was just
|
||||
generated, fill the vuffer with NULL
|
||||
}
|
||||
If Status <> StOK then
|
||||
FillChar(Buf, Count, #0); { Error clear buffer }
|
||||
End;
|
||||
Inc(Position, BytesMoved); { Adjust position }
|
||||
END;
|
||||
|
||||
{--TDosStream---------------------------------------------------------------}
|
||||
@ -1416,8 +1426,9 @@ PROCEDURE TDosStream.Write (Var Buf; Count: Sw_Word);
|
||||
VAR BytesMoved: Sw_Word;
|
||||
DosStreamError : Word;
|
||||
BEGIN
|
||||
{ Assume status is StOk }
|
||||
Status := StOK;
|
||||
{ If status is not OK, simply exit }
|
||||
if Status <> StOK then
|
||||
exit;
|
||||
If (Handle = InvalidHandle) Then
|
||||
Error(stWriteError, 103); { File not open }
|
||||
BlockWrite(FileInfo, Buf, Count, BytesMoved); { Write to file }
|
||||
@ -1478,8 +1489,8 @@ PROCEDURE TBufStream.Flush;
|
||||
VAR W: Sw_Word;
|
||||
DosStreamError : Word;
|
||||
BEGIN
|
||||
{ Assume status is StOK }
|
||||
Status := StOK;
|
||||
If Status <> StOK then
|
||||
exit;
|
||||
If (LastMode=2) AND (BufPtr<>0) Then Begin { Must update file }
|
||||
If (Handle = InvalidHandle) Then DosStreamError := 103 { File is not open }
|
||||
Else
|
||||
@ -1536,8 +1547,11 @@ PROCEDURE TBufStream.Read (Var Buf; Count: Sw_Word);
|
||||
VAR Success: Integer; W, Bw: Sw_Word; P: PByteArray;
|
||||
DosStreamError : Word;
|
||||
BEGIN
|
||||
{ Assume status is StOK }
|
||||
Status := StOK;
|
||||
If Status <> StOk then
|
||||
begin
|
||||
FillChar(P^, Count, #0); { Error clear buffer }
|
||||
exit;
|
||||
end;
|
||||
If (Position + Count > StreamSize) Then { Read pas stream end }
|
||||
Error(stReadError, 0); { Call stream error }
|
||||
If (Handle = InvalidHandle) Then Error(stReadError, 103); { File not open }
|
||||
@ -1581,8 +1595,7 @@ PROCEDURE TBufStream.Write (Var Buf; Count: Sw_Word);
|
||||
VAR Success: Integer; W: Sw_Word; P: PByteArray;
|
||||
DosStreamError : Word;
|
||||
BEGIN
|
||||
{ Assume status is StOK }
|
||||
Status := StOK;
|
||||
if Status <> StOK then exit; { Exit if error }
|
||||
If (Handle = InvalidHandle) Then Error(stWriteError, 103); { File not open }
|
||||
If (LastMode=1) Then Flush; { Flush read buffer }
|
||||
LastMode := 2; { Now set write mode }
|
||||
@ -2888,7 +2901,10 @@ END;
|
||||
END.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.14 2002-10-30 22:44:44 carl
|
||||
Revision 1.15 2002-10-31 12:47:30 carl
|
||||
* more compatibility fixes for objects unit
|
||||
|
||||
Revision 1.14 2002/10/30 22:44:44 carl
|
||||
* Bugfix for error checking
|
||||
- DosStreamError is no longer global (bugfix 2043)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user