@@ -224,8 +224,14 @@ struct table_iter {
224
224
struct block_iter bi ;
225
225
int is_finished ;
226
226
};
227
- #define TABLE_ITER_INIT { \
228
- .bi = BLOCK_ITER_INIT \
227
+
228
+ static int table_iter_init (struct table_iter * ti , struct reftable_reader * r )
229
+ {
230
+ struct block_iter bi = BLOCK_ITER_INIT ;
231
+ memset (ti , 0 , sizeof (* ti ));
232
+ ti -> r = r ;
233
+ ti -> bi = bi ;
234
+ return 0 ;
229
235
}
230
236
231
237
static int table_iter_next_in_block (struct table_iter * ti ,
@@ -386,26 +392,23 @@ static void iterator_from_table_iter(struct reftable_iterator *it,
386
392
it -> ops = & table_iter_vtable ;
387
393
}
388
394
389
- static int table_iter_seek_to (struct table_iter * ti , struct reftable_reader * r ,
390
- uint64_t off , uint8_t typ )
395
+ static int table_iter_seek_to (struct table_iter * ti , uint64_t off , uint8_t typ )
391
396
{
392
397
int err ;
393
398
394
- err = reader_init_block_reader (r , & ti -> br , off , typ );
399
+ err = reader_init_block_reader (ti -> r , & ti -> br , off , typ );
395
400
if (err != 0 )
396
401
return err ;
397
402
398
- ti -> r = r ;
399
403
ti -> typ = block_reader_type (& ti -> br );
400
404
ti -> block_off = off ;
401
405
block_iter_seek_start (& ti -> bi , & ti -> br );
402
406
return 0 ;
403
407
}
404
408
405
- static int table_iter_seek_start (struct table_iter * ti , struct reftable_reader * r ,
406
- uint8_t typ , int index )
409
+ static int table_iter_seek_start (struct table_iter * ti , uint8_t typ , int index )
407
410
{
408
- struct reftable_reader_offsets * offs = reader_offsets_for (r , typ );
411
+ struct reftable_reader_offsets * offs = reader_offsets_for (ti -> r , typ );
409
412
uint64_t off = offs -> offset ;
410
413
if (index ) {
411
414
off = offs -> index_offset ;
@@ -415,7 +418,7 @@ static int table_iter_seek_start(struct table_iter *ti, struct reftable_reader *
415
418
typ = BLOCK_TYPE_INDEX ;
416
419
}
417
420
418
- return table_iter_seek_to (ti , r , off , typ );
421
+ return table_iter_seek_to (ti , off , typ );
419
422
}
420
423
421
424
static int table_iter_seek_linear (struct table_iter * ti ,
@@ -548,7 +551,7 @@ static int table_iter_seek_indexed(struct table_iter *ti,
548
551
if (err != 0 )
549
552
goto done ;
550
553
551
- err = table_iter_seek_to (ti , ti -> r , index_result .u .idx .offset , 0 );
554
+ err = table_iter_seek_to (ti , index_result .u .idx .offset , 0 );
552
555
if (err != 0 )
553
556
goto done ;
554
557
@@ -578,15 +581,17 @@ static int reader_seek(struct reftable_reader *r, struct reftable_iterator *it,
578
581
{
579
582
uint8_t typ = reftable_record_type (rec );
580
583
struct reftable_reader_offsets * offs = reader_offsets_for (r , typ );
581
- struct table_iter ti = TABLE_ITER_INIT , * p ;
584
+ struct table_iter ti , * p ;
582
585
int err ;
583
586
584
587
if (!offs -> is_present ) {
585
588
iterator_set_empty (it );
586
589
return 0 ;
587
590
}
588
591
589
- err = table_iter_seek_start (& ti , r , reftable_record_type (rec ),
592
+ table_iter_init (& ti , r );
593
+
594
+ err = table_iter_seek_start (& ti , reftable_record_type (rec ),
590
595
!!offs -> index_offset );
591
596
if (err < 0 )
592
597
goto out ;
@@ -722,15 +727,15 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
722
727
struct reftable_iterator * it ,
723
728
uint8_t * oid )
724
729
{
725
- struct table_iter ti_empty = TABLE_ITER_INIT ;
726
- struct table_iter * ti = reftable_calloc (1 , sizeof (* ti ));
730
+ struct table_iter * ti ;
727
731
struct filtering_ref_iterator * filter = NULL ;
728
732
struct filtering_ref_iterator empty = FILTERING_REF_ITERATOR_INIT ;
729
733
int oid_len = hash_size (r -> hash_id );
730
734
int err ;
731
735
732
- * ti = ti_empty ;
733
- err = table_iter_seek_start (ti , r , BLOCK_TYPE_REF , 0 );
736
+ REFTABLE_ALLOC_ARRAY (ti , 1 );
737
+ table_iter_init (ti , r );
738
+ err = table_iter_seek_start (ti , BLOCK_TYPE_REF , 0 );
734
739
if (err < 0 ) {
735
740
reftable_free (ti );
736
741
return err ;
0 commit comments