Example #1
0
int
do_round(struct index *idx, struct trace *t)
{
	const char *p;
	void *data;

	trace_foreach(t, p) {
		switch (*p) {
		case '+':
			assert(index_put(idx, p + 1, MAGIC) == 0);
			break;
		case ' ':
			assert(index_get(idx, p + 1, &data) == 0);
			assert(data == MAGIC);
			break;
		case '-':
			assert(index_del(idx, p + 1) == 0);
			break;
		default:
			errx(1, "invalid trace command character (%c)", *p);
		}
	}

	return 0;
}
Example #2
0
int delete_record(ALLOC * a, table_t * t, handle_t h)
{
    record_t *r;
    int ret = -1;

    if ((r = read_record(a, t, h)) == NULL)
        return -1;

    for (int i = 0; i < t->ncols; i++)
        if (t->cols[i].index != 0)
            index_del(t->cols[i].idx, &r->vals[i], r->self);

    if (_list_del_record(a, t, r) < 0)
        goto Error;
    if (dealloc_blk(a, h) < 0)
        goto Error;
    ret = 0;
Error:
    preserve_errno(_free_record(r));
    return ret;

}