Răsfoiți Sursa

slightly changed seek()/readByte() impl

ncannasse 10 ani în urmă
părinte
comite
1ea1d7b5bc
1 a modificat fișierele cu 11 adăugiri și 11 ștergeri
  1. 11 11
      hxd/impl/Air3File.hx

+ 11 - 11
hxd/impl/Air3File.hx

@@ -13,11 +13,12 @@ class FileInput extends haxe.io.Input {
 
 	var fs : flash.filesystem.FileStream;
 	var avail : Int;
+	var maxSize : Int;
 
 	public function new(file) {
 		fs = new flash.filesystem.FileStream();
 		fs.open(file, flash.filesystem.FileMode.READ);
-		avail = fs.bytesAvailable;
+		maxSize = avail = fs.bytesAvailable;
 	}
 
 	override function close() {
@@ -30,19 +31,18 @@ class FileInput extends haxe.io.Input {
 	public function seek( p : Int, pos : FileSeek ) {
 		switch( pos ) {
 		case SeekBegin:
-			var end = Std.int(fs.position) + avail;
-			if( p > end ) p = end;
+			if( p < 0 ) p = 0;
+			if( p > maxSize ) p = maxSize;
 			fs.position = p;
-			avail = fs.bytesAvailable;
+			avail = maxSize;
 		case SeekCur:
-			if( p > avail ) p = avail;
+			if( p < 0 && p < -fs.position ) p = -Std.int(fs.position) else if( p > avail ) p = avail;
 			fs.position += p;
 			avail -= p;
 		case SeekEnd:
-			var end = Std.int(fs.position) + avail;
-			if( p > end ) p = end;
-			fs.position = end - p;
-			avail = fs.bytesAvailable;
+			if( p > maxSize ) p = maxSize;
+			fs.position = maxSize - p;
+			avail = p;
 		}
 	}
 
@@ -55,8 +55,8 @@ class FileInput extends haxe.io.Input {
 	}
 
 	override function readByte() {
-		var b;
-		try b = fs.readUnsignedByte() catch( e : Dynamic ) throw new haxe.io.Eof();
+		if( avail <= 0 ) throw new haxe.io.Eof();
+		var b = fs.readUnsignedByte();
 		avail--;
 		return b;
 	}