This commit is contained in:
Hongze Cheng 2022-01-20 07:28:58 +00:00
parent e078dd69e9
commit 2394e0e0ff
2 changed files with 26 additions and 4 deletions

View File

@ -104,6 +104,7 @@ int tdbMPoolFileOpen(TDB_MPFILE **mpfp, const char *fname, TDB_MPOOL *mp) {
} }
mpf->fd = -1; mpf->fd = -1;
mpf->mp = mp;
if ((mpf->fname = strdup(fname)) == NULL) { if ((mpf->fname = strdup(fname)) == NULL) {
goto _err; goto _err;
@ -113,6 +114,10 @@ int tdbMPoolFileOpen(TDB_MPFILE **mpfp, const char *fname, TDB_MPOOL *mp) {
goto _err; goto _err;
} }
if (tdbGnrtFileID(fname, mpf->fileid) < 0) {
goto _err;
}
*mpfp = mpf; *mpfp = mpf;
return 0; return 0;
@ -123,11 +128,28 @@ _err:
} }
int tdbMPoolFileClose(TDB_MPFILE *mpf) { int tdbMPoolFileClose(TDB_MPFILE *mpf) {
// TODO if (mpf) {
if (mpf->fd > 0) {
close(mpf->fd);
}
tfree(mpf->fname);
free(mpf);
}
return 0; return 0;
} }
static int tdbGnrtFileID(const char *fname, uint8_t *fileid) { static int tdbGnrtFileID(const char *fname, uint8_t *fileid) {
// TODO struct stat statbuf;
if (stat(fname, &statbuf) < 0) {
return -1;
}
memset(fileid, 0, TDB_FILE_ID_LEN);
((uint64_t *)fileid)[0] = (uint64_t)statbuf.st_ino;
((uint64_t *)fileid)[1] = (uint64_t)statbuf.st_dev;
((uint64_t *)fileid)[2] = rand();
return 0; return 0;
} }

View File

@ -56,10 +56,10 @@ struct TDB_MPOOL {
#define MP_PAGE_AT(mp, idx) (mp)->pages[idx] #define MP_PAGE_AT(mp, idx) (mp)->pages[idx]
struct TDB_MPFILE { struct TDB_MPFILE {
uint8_t fileid[TDB_FILE_ID_LEN]; // file ID
TDB_MPOOL *mp; // underlying memory pool
char * fname; // file name char * fname; // file name
int fd; // fd int fd; // fd
uint8_t fileid[TDB_FILE_ID_LEN]; // file ID
TDB_MPOOL *mp; // underlying memory pool
}; };
/*=================================================== Exposed apis ==================================================*/ /*=================================================== Exposed apis ==================================================*/