SDB_API int sdb_disk_finish (Sdb* s) { int reopen = 0, ret = 1; IFRET (!cdb_make_finish (&s->m)); #if USE_MMAN IFRET (fsync (s->fdump)); #endif IFRET (close (s->fdump)); s->fdump = -1; // close current fd to avoid sharing violations if (s->fd != -1) { close (s->fd); s->fd = -1; reopen = 1; } #if __SDB_WINDOWS__ if (MoveFileEx (s->ndump, s->dir, MOVEFILE_REPLACE_EXISTING)) { //eprintf ("Error 0x%02x\n", GetLastError ()); } #else IFRET (rename (s->ndump, s->dir)); #endif free (s->ndump); s->ndump = NULL; // reopen if was open before if (reopen) { int rr = sdb_open (s, s->dir); if (ret && rr<0) { ret = 0; } } return ret; }
SDB_API int sdb_disk_finish (Sdb* s) { int ret = 1; IFRET (!cdb_make_finish (&s->m)); #if USE_MMAN IFRET (fsync (s->fdump)); #endif IFRET (close (s->fdump)); s->fdump = -1; IFRET (rename (s->ndump, s->dir)); free (s->ndump); s->ndump = NULL; return ret; }