刚才还有个bug,就是剩余的长度正好时18字节的时候,<改成<=就行了,bugfix

This commit is contained in:
zzh 2025-04-25 15:43:37 +08:00
parent dbe57f345c
commit c488d139db
1 changed files with 9 additions and 9 deletions

View File

@ -272,9 +272,9 @@ static size_t doFirstPipeReadFile(FirstPipeArg &p, DataBuffer &halfBlock, FILE *
readState = fread(readData.dataBuf, 1, readData.readBufSize, fpr); readState = fread(readData.dataBuf, 1, readData.readBufSize, fpr);
if (readState == 0) { return 0; } if (readState == 0) { return 0; }
//if (p.readOrder == 278) { if (p.readOrder == 483) {
// spdlog::info("last remain, blocklen: {}, last load: {}", halfBlock.curLen, halfBlock.readPos); spdlog::info("last remain, blocklen: {}, last load: {}", halfBlock.curLen, halfBlock.readPos);
//} }
readData.startAddrArr.clear(); readData.startAddrArr.clear();
@ -291,7 +291,7 @@ static size_t doFirstPipeReadFile(FirstPipeArg &p, DataBuffer &halfBlock, FILE *
readData.startAddrArr.push_back(readData.blockBuf); readData.startAddrArr.push_back(readData.blockBuf);
} }
/* 解析读入buf中的文件数据计算包含的每个block的长度信息和起始地址 */ /* 解析读入buf中的文件数据计算包含的每个block的长度信息和起始地址 */
while (curReadPos + BLOCK_HEADER_LENGTH < readState) { /* 确保能解析block长度 */ while (curReadPos + BLOCK_HEADER_LENGTH <= readState) { /* 确保能解析block长度 */
blockLen = unpackInt16(&readData.dataBuf[curReadPos + 16]) + 1; blockLen = unpackInt16(&readData.dataBuf[curReadPos + 16]) + 1;
if (blockLen > maxBlockLen) { maxBlockLen = blockLen; } if (blockLen > maxBlockLen) { maxBlockLen = blockLen; }
if (curReadPos + blockLen <= readState) { /* 完整的block数据在buf里 */ if (curReadPos + blockLen <= readState) { /* 完整的block数据在buf里 */
@ -307,11 +307,11 @@ static size_t doFirstPipeReadFile(FirstPipeArg &p, DataBuffer &halfBlock, FILE *
if (halfBlock.readPos > 0) { if (halfBlock.readPos > 0) {
memcpy(halfBlock.data, &readData.dataBuf[curReadPos], halfBlock.readPos); // 将不完整的block拷贝到halfBlock memcpy(halfBlock.data, &readData.dataBuf[curReadPos], halfBlock.readPos); // 将不完整的block拷贝到halfBlock
} }
//if (p.readOrder == 277) { if (p.readOrder == 482) {
// spdlog::info("tail - last remain, blocklen: {}, last load: {}", halfBlock.curLen, halfBlock.readPos); spdlog::info("tail - last remain, blocklen: {}, last load: {}", halfBlock.curLen, halfBlock.readPos);
//} }
// spdlog::info("block num-1: {}", readData.startAddrArr.size()); // spdlog::info("block num-1: {}", readData.startAddrArr.size());
//spdlog::info("max block len: {}", maxBlockLen); spdlog::info("read order: {}, max block len: {}", p.readOrder, maxBlockLen);
return readState; return readState;
} }