From 534019614dd611e7df29a0c8c59f2a869a2c0c39 Mon Sep 17 00:00:00 2001 From: Pavel Charvat Date: Tue, 17 Jul 2007 15:54:06 +0200 Subject: [PATCH] fixed a well hidden bug in file fastbufs --- lib/fb-file.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/fb-file.c b/lib/fb-file.c index 9ac57395..82236230 100644 --- a/lib/fb-file.c +++ b/lib/fb-file.c @@ -102,16 +102,14 @@ long_seek: if ((sh_off_t)back > f->pos) back = f->pos; f->bptr = f->buffer + back; - read_len = back + diff - F->wlen; + read_len = blen; + f->bstop = f->buffer + read_len; /* Reuse part of previous window */ - if (F->wlen && read_len < blen) + if (F->wlen && read_len <= back + diff && read_len > back + diff - F->wlen) { - uns keep = MIN(F->wlen, blen - read_len); - memmove(f->buffer + read_len, f->buffer, keep); - f->bstop = f->buffer + read_len + keep; + uns keep = read_len + F->wlen - back - diff; + memmove(f->buffer + read_len - keep, f->buffer, keep); } - else - f->bstop = f->buffer + (read_len = blen); seek: /* Do lseek() */ F->wpos = f->pos + (f->buffer - f->bptr); -- 2.39.2