diff --git a/source/libs/tdb/src/db/pgfile.c b/source/libs/tdb/src/db/pgfile.c index 9e4795dc084cc07014421aa0343bbae80757d1ee..670fc3a667215f78ca11fa08b46e02678048498e 100644 --- a/source/libs/tdb/src/db/pgfile.c +++ b/source/libs/tdb/src/db/pgfile.c @@ -106,6 +106,29 @@ int pgFileWrite(SPage *pPage) { } static int pgFileRead(SPgFile *pPgFile, pgno_t pgno, uint8_t *pData) { - // TODO + pgsize_t pgSize; + ssize_t rsize; + uint8_t *pTData; + size_t szToRead; + + // pgSize = ; (TODO) + pTData = pData; + szToRead = pgSize; + for (; szToRead > 0;) { + rsize = pread(pPgFile->fd, pTData, szToRead, pgno * pgSize); + if (rsize < 0) { + if (errno == EINTR) { + continue; + } else { + return -1; + } + } else if (rsize == 0) { + return -1; + } + + szToRead -= rsize; + pTData += rsize; + } + return 0; } \ No newline at end of file