Parcourir la source

* only check errno if the syscall failed

peter il y a 21 ans
Parent
commit
1662a037a4
1 fichiers modifiés avec 11 ajouts et 6 suppressions
  1. 11 6
      rtl/linux/osmain.inc

+ 11 - 6
rtl/linux/osmain.inc

@@ -212,7 +212,7 @@ Function Do_Write(Handle,Addr,Len:SizeInt):longint;
 Begin
   repeat
     Do_Write:=Fpwrite(Handle,pchar(addr),len);
-  until ErrNo<>ESysEINTR;
+  until (Do_Write>=0) or (ErrNo<>ESysEINTR);
   If Do_Write<0 Then
    Begin
     Errno2InOutRes;
@@ -227,7 +227,7 @@ Function Do_Read(Handle,Addr,Len:SizeInt):Longint;
 Begin
   repeat
     Do_Read:=Fpread(Handle,pchar(addr),len);
-  until ErrNo<>ESysEINTR;
+  until (Do_Read>=0) or (ErrNo<>ESysEINTR);
   If Do_Read<0 Then
    Begin
     Errno2InOutRes;
@@ -344,7 +344,9 @@ Begin
    end;
 { real open call }
   FileRec(f).Handle:=Fpopen(p,oflags,MODE_OPEN);
-  if (ErrNo=ESysEROFS) and ((OFlags and O_RDWR)<>0) then
+  if (FileRec(f).Handle<0) and
+     (ErrNo=ESysEROFS) and
+     ((OFlags and O_RDWR)<>0) then
    begin
      Oflags:=Oflags and not(O_RDWR);
      FileRec(f).Handle:=Fpopen(p,oflags,MODE_OPEN);
@@ -499,7 +501,7 @@ end;
 // signal handler is arch dependant due to processorexception to language
 // exception translation
 
-{$i sighnd.inc}  
+{$i sighnd.inc}
 
 var
   act: SigActionRec;
@@ -598,12 +600,15 @@ End.
 *)
 {
  $Log$
- Revision 1.8  2003-11-01 01:58:11  marco
+ Revision 1.9  2003-12-14 14:28:36  peter
+   * only check errno if the syscall failed
+
+ Revision 1.8  2003/11/01 01:58:11  marco
   * more small fixes.
 
  Revision 1.7  2003/10/31 20:36:01  marco
   * i386 specific fixes that hopefully fix texception4.
- 	Only the "generic" signal handler was ported to the unix rtl.
+        Only the "generic" signal handler was ported to the unix rtl.
 
  Revision 1.6  2003/09/27 12:51:33  peter
    * fpISxxx macros renamed to C compliant fpS_ISxxx