.type = BLOCK_TYPE_INDEX,
.u.idx = { .last_key = STRBUF_INIT },
};
- struct table_iter index_iter = TABLE_ITER_INIT;
- struct table_iter empty = TABLE_ITER_INIT;
- struct table_iter next = TABLE_ITER_INIT;
+ struct table_iter ti = TABLE_ITER_INIT, *malloced;
int err = 0;
reftable_record_key(rec, &want_index.u.idx.last_key);
- err = reader_start(r, &index_iter, reftable_record_type(rec), 1);
+ err = reader_start(r, &ti, reftable_record_type(rec), 1);
if (err < 0)
goto done;
* highest layer that identifies the relevant index block as well as
* the record inside that block that corresponds to our wanted key.
*/
- err = reader_seek_linear(&index_iter, &want_index);
+ err = reader_seek_linear(&ti, &want_index);
if (err < 0)
goto done;
* all levels of the index only to find out that the key does
* not exist.
*/
- err = table_iter_next(&index_iter, &index_result);
+ err = table_iter_next(&ti, &index_result);
if (err != 0)
goto done;
- err = reader_table_iter_at(r, &next, index_result.u.idx.offset,
- 0);
+ err = reader_table_iter_at(r, &ti, index_result.u.idx.offset, 0);
if (err != 0)
goto done;
- err = block_iter_seek_key(&next.bi, &next.br, &want_index.u.idx.last_key);
+ err = block_iter_seek_key(&ti.bi, &ti.br, &want_index.u.idx.last_key);
if (err < 0)
goto done;
- if (next.typ == reftable_record_type(rec)) {
+ if (ti.typ == reftable_record_type(rec)) {
err = 0;
break;
}
- if (next.typ != BLOCK_TYPE_INDEX) {
+ if (ti.typ != BLOCK_TYPE_INDEX) {
err = REFTABLE_FORMAT_ERROR;
- break;
+ goto done;
}
-
- table_iter_close(&index_iter);
- index_iter = next;
- next = empty;
}
- if (err == 0) {
- struct table_iter *malloced = reftable_calloc(1, sizeof(*malloced));
- *malloced = next;
- next = empty;
- iterator_from_table_iter(it, malloced);
- }
+ REFTABLE_ALLOC_ARRAY(malloced, 1);
+ *malloced = ti;
+ iterator_from_table_iter(it, malloced);
done:
- table_iter_close(&next);
- table_iter_close(&index_iter);
+ if (err)
+ table_iter_close(&ti);
reftable_record_release(&want_index);
reftable_record_release(&index_result);
return err;