コード例 #1
0
ファイル: sc_commit.c プロジェクト: dioptre/sophia
int sc_commit(sc *s, svlog *log, uint64_t lsn, int recover)
{
	/* write-ahead log */
	swtx tl;
	sw_begin(s->wm, &tl, lsn, recover);
	int rc = sw_write(&tl, log);
	if (ssunlikely(rc == -1)) {
		sw_rollback(&tl);
		return -1;
	}
	sw_commit(&tl);

	/* index */
	svlogindex *i   = (svlogindex*)log->index.s;
	svlogindex *end = (svlogindex*)log->index.p;
	for (; i < end; i++) {
		if (i->count == 0)
			continue;
		si *index = i->r->ptr;
		sitx x;
		si_begin(&x, index);
		si_write(&x, log, i, recover);
		si_commit(&x);
	}
	return 0;
}
コード例 #2
0
ファイル: vswprintf.c プロジェクト: 0u812/emscripten
static size_t sw_write(FILE *f, const unsigned char *s, size_t l)
{
	size_t l0 = l;
	int i = 0;
	struct cookie *c = f->cookie;
	if (s!=f->wbase && sw_write(f, f->wbase, f->wpos-f->wbase)==-1)
		return -1;
	while (c->l && l && (i=mbtowc(c->ws, (void *)s, l))>=0) {
		s+=i;
		l-=i;
		c->l--;
		c->ws++;
	}
	*c->ws = 0;
	return i<0 ? i : l0;
}