Skip to content

Commit f126e8b

Browse files
committed
Added missing changes
1 parent 19720ec commit f126e8b

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

system/jhtree/jhblockcompressed.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -350,13 +350,15 @@ void CJHBlockCompressedVarNode::load(CKeyHdr *_keyHdr, const void *rawData, offs
350350
recArray[i] = finger + sizeof(KEYRECSIZE_T);
351351
KEYRECSIZE_T recsize = *(KEYRECSIZE_T *)finger;
352352
_WINREV(recsize);
353-
finger += recsize + sizeof(KEYRECSIZE_T) + sizeof(offset_t);
353+
finger += recsize + sizeof(KEYRECSIZE_T);
354+
if (hasFilePosition)
355+
finger += sizeof(offset_t);
354356
}
355357
}
356358

357359
int CJHBlockCompressedVarNode::compareValueAt(const char *src, unsigned int index) const
358360
{
359-
return memcmp(src, recArray[index] + (keyHdr->hasSpecialFileposition() ? sizeof(offset_t) : 0), keyCompareLen);
361+
return memcmp(src, recArray[index], keyCompareLen);
360362
}
361363

362364
bool CJHBlockCompressedVarNode::fetchPayload(unsigned int num, char *dst, PayloadReference & activePayload) const
@@ -370,8 +372,14 @@ bool CJHBlockCompressedVarNode::fetchPayload(unsigned int num, char *dst, Payloa
370372
_WINREV(reclen);
371373
if (keyHdr->hasSpecialFileposition())
372374
{
373-
memcpy(dst+keyCompareLen, p+keyCompareLen+sizeof(offset_t), reclen-keyCompareLen);
374-
memcpy(dst+reclen, p, sizeof(offset_t));
375+
memcpy(dst+keyCompareLen, p+keyCompareLen, reclen-keyCompareLen);
376+
if (hasFilePosition)
377+
memcpy(dst+reclen, p+reclen, sizeof(offset_t));
378+
else
379+
{
380+
offset_t zeroPos = 0;
381+
memcpy(dst+reclen, &zeroPos, sizeof(offset_t));
382+
}
375383
}
376384
else
377385
memcpy(dst+keyCompareLen, p+keyCompareLen, reclen-keyCompareLen);
@@ -389,10 +397,7 @@ bool CJHBlockCompressedVarNode::getKeyAt(unsigned int num, char *dst) const
389397
KEYRECSIZE_T reclen = ((KEYRECSIZE_T *) p)[-1];
390398
_WINREV(reclen);
391399
assertex(reclen >= keyCompareLen);
392-
if (keyHdr->hasSpecialFileposition())
393-
memcpy(dst, p + sizeof(offset_t), keyCompareLen);
394-
else
395-
memcpy(dst, p, keyCompareLen);
400+
memcpy(dst, p, keyCompareLen);
396401
}
397402
return true;
398403
}
@@ -411,10 +416,13 @@ size32_t CJHBlockCompressedVarNode::getSizeAt(unsigned int num) const
411416
offset_t CJHBlockCompressedVarNode::getFPosAt(unsigned int num) const
412417
{
413418
if (num >= hdr.numKeys) return 0;
419+
if (!hasFilePosition) return 0;
414420

415421
const char * p = recArray[num];
422+
KEYRECSIZE_T reclen = ((KEYRECSIZE_T *) p)[-1];
423+
_WINREV(reclen);
416424
offset_t pos;
417-
memcpy( &pos, p, sizeof(__int64) );
425+
memcpy( &pos, p + reclen, sizeof(__int64) );
418426
_WINREV(pos);
419427
return pos;
420428
}

0 commit comments

Comments
 (0)