diff src/org/tmatesoft/hg/internal/FilterDataAccess.java @ 420:6c22bdc0bdfd

Respect long offsets in revlogs
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 22 Mar 2012 22:56:01 +0100
parents 5e95b0da26f2
children fdd7d756dea0
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/FilterDataAccess.java	Thu Mar 22 21:36:41 2012 +0100
+++ b/src/org/tmatesoft/hg/internal/FilterDataAccess.java	Thu Mar 22 22:56:01 2012 +0100
@@ -28,11 +28,11 @@
  */
 public class FilterDataAccess extends DataAccess {
 	private final DataAccess dataAccess;
-	private final int offset;
+	private final long offset;
 	private final int length;
 	private int count;
 
-	public FilterDataAccess(DataAccess dataAccess, int offset, int length) {
+	public FilterDataAccess(DataAccess dataAccess, long offset, int length) {
 		this.dataAccess = dataAccess;
 		this.offset = offset;
 		this.length = length;
@@ -64,8 +64,8 @@
 		if (localOffset < 0 || localOffset > length) {
 			throw new IllegalArgumentException();
 		}
-		dataAccess.seek(offset + localOffset);
-		count = (int) (length - localOffset);
+		dataAccess.longSeek(offset + localOffset);
+		count = length - localOffset;
 	}
 
 	@Override
@@ -91,7 +91,7 @@
 			throw new IOException(String.format("Underflow. Bytes left: %d. FilterDA[offset: %d, length: %d]", count, offset, length));
 		}
 		if (count == length) {
-			dataAccess.seek(offset);
+			dataAccess.longSeek(offset);
 		}
 		count--;
 		return dataAccess.readByte();
@@ -106,7 +106,7 @@
 			throw new IOException(String.format("Underflow. Bytes left: %d, asked to read %d. FilterDA[offset: %d, length: %d]", count, len, offset, length));
 		}
 		if (count == length) {
-			dataAccess.seek(offset);
+			dataAccess.longSeek(offset);
 		}
 		dataAccess.readBytes(b, off, len);
 		count -= len;