Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}