* more compatibility fixes for objects unit

This commit is contained in:
carl 2002-10-31 12:47:30 +00:00
parent 88b1b352d1
commit 4cfe3217c0

View File

@ -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)