浏览代码

use absolute path for CWD instead of "."

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

+ 10 - 11
source/Unix.UnixFiles.Mod

@@ -368,19 +368,18 @@ TYPE
 								END;
 								REPEAT
 									n := Unix.read( fdold, ADDRESSOF( buf ), Bufsize ); (*can return -1 with EINTR without any particular reason*)
-									IF n>0 THEN
+									IF n > 0 THEN
 										REPEAT
 											r := Unix.write( fdnew, ADDRESSOF( buf ), n );
-											res:= Unix.errno();
-										UNTIL (r>=0) OR (res#Unix.EINTR);   (*ignore EINTR, retry*)
+											IF r < 0 THEN  res:= Unix.errno( )  END;
+										UNTIL (r >= 0) OR (res # Unix.EINTR); (*ignore EINTR, retry*)
 										IF r < 0 THEN
-											res := Unix.errno();  
 											r := Unix.close( fdold );  
 											r := Unix.close( fdnew );
 											RETURN NoDesc;
 										END;
 									END
-								UNTIL n=0;
+								UNTIL n = 0;
 								r := Unix.unlink( ADDRESSOF( old ) );
 								r := Unix.close( fdold );
 								r := Unix.close( fdnew );  
@@ -596,10 +595,8 @@ TYPE
 						IF buf.org # fpos THEN  res := Unix.lseek( fd, buf.org, 0 )  END;
 						REPEAT
 							res := Unix.write( fd, ADDRESSOF( buf.data ), buf.size );
-							IF res<0 THEN
-								err:=Unix.errno();
-							END;
-						UNTIL (res>=0) OR (err#Unix.EINTR);   (*ignore EINTR, retry*)
+							IF res < 0 THEN  err := Unix.errno()  END;
+						UNTIL (res >= 0) OR (err # Unix.EINTR);   (*ignore EINTR, retry*)
 						IF res < 0 THEN  Halt( SELF, TRUE, "UnixFiles.File.Flush: write failed" )  END;
 						fpos := buf.org + buf.size;  buf.chg := FALSE;
 						res := Unix.fstat( fd, stat );  mtime := stat.mtime.sec
@@ -642,7 +639,9 @@ TYPE
 							IF res < 0 THEN  Halt( SELF, TRUE, "UnixFiles.File.Set: lseek failed" )  END;
 							REPEAT
 								n := Unix.read( fd, ADDRESSOF( buf.data ), Bufsize ); (*can return -1 with EINTR without warning*)
-							UNTIL n>=0;
+								IF n < 0 THEN  res:= Unix.errno( )  END;
+							UNTIL (n >= 0) OR ((res # Unix.EINTR) & (res # Unix.EINVAL));
+									(* Solaris returns EINVAL instead of EINTR ! ??? *)
 							IF n < 0 THEN  
 								IF p < fsize THEN  Halt( SELF, TRUE, "UnixFiles.File.Set: read failed" )  
 								ELSE n := 0
@@ -959,7 +958,7 @@ TYPE
 			END;
 		UNTIL (i >= 0) & (path[i] = 0X);
 		IF (i > 1) & (path[i - 1] = '/') THEN  path[i - 1] := 0X  END;
-		IF path = "" THEN  path := "."  END;
+		IF path = "" THEN  COPY( cwd, path )  END;
 	END CleanPath;