do a better job with 64-bit files
diff --git a/src/libbio/bseek.c b/src/libbio/bseek.c
index c9e4493..4e79aff 100644
--- a/src/libbio/bseek.c
+++ b/src/libbio/bseek.c
@@ -5,6 +5,7 @@
 Bseek(Biobuf *bp, off_t offset, int base)
 {
 	vlong n, d;
+	int bufsz;
 
 	switch(bp->state) {
 	default:
@@ -28,13 +29,16 @@
 		 */
 		if(base == 0) {
 			d = n - Boffset(bp);
-			bp->icount += d;
-			if(d >= 0) {
-				if(bp->icount <= 0)
-					return n;
-			} else {
-				if(bp->ebuf - bp->gbuf >= -bp->icount)
-					return n;
+			bufsz = bp->ebuf - bp->gbuf;
+			if(-bufsz <= d && d <= bufsz){
+				bp->icount += d;
+				if(d >= 0) {
+					if(bp->icount <= 0)
+						return n;
+				} else {
+					if(bp->ebuf - bp->gbuf >= -bp->icount)
+						return n;
+				}
 			}
 		}