浏览代码

fixed Unix.lseek() calls

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7440 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 7 年之前
父节点
当前提交
1cde65c61a
共有 1 个文件被更改,包括 13 次插入6 次删除
  1. 13 6
      source/Unix.UnixFiles.Mod

+ 13 - 6
source/Unix.UnixFiles.Mod

@@ -4,7 +4,7 @@ MODULE UnixFiles;   (** AUTHOR "gf"; PURPOSE "Unix file systems" *)
 
 (*  derived fron (SPARCOberon) Files.Mod by J. Templ 1.12. 89/14.05.93 *)
 
-IMPORT S := SYSTEM, Unix, Kernel, Modules, Log := KernelLog, Files, Commands;
+IMPORT S := SYSTEM, Unix, Kernel, Modules, Log := KernelLog, Files, Commands, Tr := Trace;
 
 
 CONST
@@ -369,7 +369,7 @@ TYPE
 										r := UnixWrite( fdnew, ADDRESSOF( buf ), n );
 										IF r < 0 THEN
 											r := Unix.close( fdold );  
-											r := Unix.close( fdnew );
+											r := Unix.close( fdnew );   
 											RETURN NoDesc;
 										END;
 									END
@@ -492,7 +492,7 @@ TYPE
 								ELSE  INC( i );  j := 0  
 								END
 							ELSE
-								dirName[j] := searchPath[i];  INC( j );  INC( i )
+								dirName[j] := searchPath[i];  INC( j );  INC( i )    
 							END
 						END
 					END;
@@ -577,7 +577,11 @@ TYPE
 				BEGIN
 					IF buf.chg THEN
 						IF fd = NoDesc THEN  CreateUnixFile  END;
-						IF buf.org # fpos THEN  res := Unix.lseek( fd, buf.org, 0 )  END;
+						IF buf.org # fpos THEN  
+							IF Unix.lseek( fd, buf.org, 0 ) = -1 THEN
+								Halt( SELF, TRUE, "UnixFiles.File.Flush: lseek failed" ) 
+							END 
+						END;
 						res := UnixWrite( fd, ADDRESSOF( buf.data ), buf.size );
 						IF res < 0 THEN  Halt( SELF, TRUE, "UnixFiles.File.Flush: write failed" )  END;
 						fpos := buf.org + buf.size;  buf.chg := FALSE;
@@ -617,8 +621,11 @@ TYPE
 							buf.size := 0
 						ELSE
 							IF fd = NoDesc THEN  CreateUnixFile  END;
-							IF fpos # org THEN  res := Unix.lseek( fd, org, 0 )  END;
-							IF res < 0 THEN  Halt( SELF, TRUE, "UnixFiles.File.Set: lseek failed" )  END;
+							IF fpos # org THEN  
+								IF Unix.lseek( fd, org, 0 ) = -1 THEN
+									Halt( SELF, TRUE, "UnixFiles.File.Set: lseek failed" ) 
+								END  
+							END;
 							n := UnixRead( fd, ADDRESSOF( buf.data ), Bufsize ); 
 							IF n < 0 THEN  
 								IF p < fsize THEN  Halt( SELF, TRUE, "UnixFiles.File.Set: read failed" )