commit - 75a69d3b20b73b4a66530043090198b8be1d7d0a
commit + 39ef727f465306bad804814e58ee0a94224c9fec
blob - c9e4493ec806417f257af70770f5f1bc53cb97a3
blob + 4e79affdf78b453823d1008793f09f3b65e75f9c
--- src/libbio/bseek.c
+++ src/libbio/bseek.c
Bseek(Biobuf *bp, off_t offset, int base)
{
vlong n, d;
+ int bufsz;
switch(bp->state) {
default:
*/
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;
+ }
}
}