diff --git a/source/libs/tdb/src/db/tdbPage.c b/source/libs/tdb/src/db/tdbPage.c index 4ad9119660..3e0d845d6d 100644 --- a/source/libs/tdb/src/db/tdbPage.c +++ b/source/libs/tdb/src/db/tdbPage.c @@ -125,6 +125,7 @@ int tdbPageDestroy(SPage *pPage, void (*xFree)(void *arg, void *ptr), void *arg) int tdbPageInsertCell(SPage *pPage, int idx, SCell *pCell, int szCell) { int ret; SCell *pTarget; + u8 *pTmp; if (pPage->nOverflow || szCell + pPage->szOffset > pPage->nFree) { // TODO: Page is full @@ -136,8 +137,9 @@ int tdbPageInsertCell(SPage *pPage, int idx, SCell *pCell, int szCell) { } memcpy(pTarget, pCell, szCell); - // TODO: memmove(); - TDB_PAGE_CELL_OFFSET_AT_SET(pPage, idx, pCell - pPage->pData); + pTmp = pPage->pCellIdx + idx + pPage->szOffset; + memmove(pTmp, pTmp + pPage->szOffset, pPage->pFreeStart - pTmp - pPage->szOffset); + TDB_PAGE_CELL_OFFSET_AT_SET(pPage, idx, pTarget - pPage->pData); TDB_PAGE_NCELLS_SET(pPage, TDB_PAGE_NCELLS(pPage) + 1); }