From: Petr G. <ba...@ma...> - 2004-05-24 11:09:12
|
Hello. Correct me if there are errors in this letter but: There seems to be a bug in lucene::store::RAMDirectory::readInternal(). Please consider comments there: //TODO2: check this... this may be a bug in java lucene.... //if pointer is less than buffersize, and bigger than 0 //remainder will be greater than 0 after first loop, //so it will try and read bufferNumber 1. Original (Java) lucene code looks like this: > int remainder = len; Respective clucene code is int_t remainder = len - (pointer < LUCENE_STREAM_BUFFER_SIZE ? pointer : 0); I ran into the problem when refill() method reads past the EOF (in this case we should consider "len" parameter as "up to len bytes"). So clucene's code fixes this problem for cases when refill tries to read past first buffer while other cases are not covered. I think that more correct code would look like this: > const int_t max_remainder = file->length - pointer; > int_t remainder = len; > if (remainder > max_remainder) > remainder = max_remainder; bye Petr |