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; }
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; }