Skip to content

Commit 1ac4e5e

Browse files
pks-tgitster
authored andcommitted
reftable/blocksource: consolidate code into a single file
The code that implements block sources is distributed across a couple of files. Consolidate all of it into "reftable/blocksource.c" and its accompanying header so that it is easier to locate and more self contained. While at it, rename some of the functions to have properly scoped names. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b648bd6 commit 1ac4e5e

File tree

10 files changed

+80
-62
lines changed

10 files changed

+80
-62
lines changed

reftable/block.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block,
221221
uint32_t restart_start = 0;
222222
uint8_t *restart_bytes = NULL;
223223

224-
reftable_block_done(&br->block);
224+
block_source_return_block(&br->block);
225225

226226
if (!reftable_is_block_type(typ)) {
227227
err = REFTABLE_FORMAT_ERROR;
@@ -285,7 +285,7 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block,
285285
}
286286

287287
/* We're done with the input data. */
288-
reftable_block_done(block);
288+
block_source_return_block(block);
289289
block->data = br->uncompressed_data;
290290
block->len = sz;
291291
full_block_size = src_len + block_header_skip - br->zstream->avail_in;
@@ -324,7 +324,7 @@ void block_reader_release(struct block_reader *br)
324324
inflateEnd(br->zstream);
325325
reftable_free(br->zstream);
326326
reftable_free(br->uncompressed_data);
327-
reftable_block_done(&br->block);
327+
block_source_return_block(&br->block);
328328
}
329329

330330
uint8_t block_reader_type(const struct block_reader *r)
@@ -570,14 +570,3 @@ void block_writer_release(struct block_writer *bw)
570570
reftable_buf_release(&bw->last_key);
571571
/* the block is not owned. */
572572
}
573-
574-
void reftable_block_done(struct reftable_block *blockp)
575-
{
576-
struct reftable_block_source source = blockp->source;
577-
if (blockp && source.ops)
578-
source.ops->return_block(source.arg, blockp);
579-
blockp->data = NULL;
580-
blockp->len = 0;
581-
blockp->source.ops = NULL;
582-
blockp->source.arg = NULL;
583-
}

reftable/block.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,4 @@ size_t header_size(int version);
142142
/* size of file footer, depending on format version */
143143
size_t footer_size(int version);
144144

145-
/* returns a block to its source. */
146-
void reftable_block_done(struct reftable_block *ret);
147-
148145
#endif

reftable/blocksource.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,41 @@
1313
#include "reftable-blocksource.h"
1414
#include "reftable-error.h"
1515

16+
void block_source_return_block(struct reftable_block *block)
17+
{
18+
struct reftable_block_source source = block->source;
19+
if (block && source.ops)
20+
source.ops->return_block(source.arg, block);
21+
block->data = NULL;
22+
block->len = 0;
23+
block->source.ops = NULL;
24+
block->source.arg = NULL;
25+
}
26+
27+
void block_source_close(struct reftable_block_source *source)
28+
{
29+
if (!source->ops) {
30+
return;
31+
}
32+
33+
source->ops->close(source->arg);
34+
source->ops = NULL;
35+
}
36+
37+
ssize_t block_source_read_block(struct reftable_block_source *source,
38+
struct reftable_block *dest, uint64_t off,
39+
uint32_t size)
40+
{
41+
ssize_t result = source->ops->read_block(source->arg, dest, off, size);
42+
dest->source = *source;
43+
return result;
44+
}
45+
46+
uint64_t block_source_size(struct reftable_block_source *source)
47+
{
48+
return source->ops->size(source->arg);
49+
}
50+
1651
static void reftable_buf_return_block(void *b REFTABLE_UNUSED, struct reftable_block *dest)
1752
{
1853
if (dest->len)

reftable/blocksource.h

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,34 @@
1212
#include "system.h"
1313

1414
struct reftable_block_source;
15+
struct reftable_block;
1516
struct reftable_buf;
1617

17-
/* Create an in-memory block source for reading reftables */
18+
/*
19+
* Close the block source and the underlying resource. This is a no-op in case
20+
* the block source is zero-initialized.
21+
*/
22+
void block_source_close(struct reftable_block_source *source);
23+
24+
/*
25+
* Read a block of length `size` from the source at the given `off`.
26+
*/
27+
ssize_t block_source_read_block(struct reftable_block_source *source,
28+
struct reftable_block *dest, uint64_t off,
29+
uint32_t size);
30+
31+
/*
32+
* Return the total length of the underlying resource.
33+
*/
34+
uint64_t block_source_size(struct reftable_block_source *source);
35+
36+
/*
37+
* Return a block to its original source, releasing any resources associated
38+
* with it.
39+
*/
40+
void block_source_return_block(struct reftable_block *block);
41+
42+
/* Create an in-memory block source for reading reftables. */
1843
void block_source_from_buf(struct reftable_block_source *bs,
1944
struct reftable_buf *buf);
2045

reftable/iter.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "system.h"
1212

1313
#include "block.h"
14+
#include "blocksource.h"
1415
#include "constants.h"
1516
#include "reftable-error.h"
1617
#include "table.h"
@@ -113,7 +114,7 @@ static void indexed_table_ref_iter_close(void *p)
113114
{
114115
struct indexed_table_ref_iter *it = p;
115116
block_iter_close(&it->cur);
116-
reftable_block_done(&it->block_reader.block);
117+
block_source_return_block(&it->block_reader.block);
117118
reftable_free(it->offsets);
118119
reftable_buf_release(&it->oid);
119120
}
@@ -127,7 +128,7 @@ static int indexed_table_ref_iter_next_block(struct indexed_table_ref_iter *it)
127128
return 1;
128129
}
129130

130-
reftable_block_done(&it->block_reader.block);
131+
block_source_return_block(&it->block_reader.block);
131132

132133
off = it->offsets[it->offset_idx++];
133134
err = table_init_block_reader(it->table, &it->block_reader, off,

reftable/reftable-blocksource.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
#include <stdint.h>
1313

14-
/* block_source is a generic wrapper for a seekable readable file.
14+
/*
15+
* Generic wrapper for a seekable readable file.
1516
*/
1617
struct reftable_block_source {
1718
struct reftable_block_source_vtable *ops;

reftable/table.c

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,12 @@
1010

1111
#include "system.h"
1212
#include "block.h"
13+
#include "blocksource.h"
1314
#include "constants.h"
1415
#include "iter.h"
1516
#include "record.h"
1617
#include "reftable-error.h"
1718

18-
uint64_t block_source_size(struct reftable_block_source *source)
19-
{
20-
return source->ops->size(source->arg);
21-
}
22-
23-
ssize_t block_source_read_block(struct reftable_block_source *source,
24-
struct reftable_block *dest, uint64_t off,
25-
uint32_t size)
26-
{
27-
ssize_t result = source->ops->read_block(source->arg, dest, off, size);
28-
dest->source = *source;
29-
return result;
30-
}
31-
32-
void block_source_close(struct reftable_block_source *source)
33-
{
34-
if (!source->ops) {
35-
return;
36-
}
37-
38-
source->ops->close(source->arg);
39-
source->ops = NULL;
40-
}
41-
4219
static struct reftable_table_offsets *
4320
table_offsets_for(struct reftable_table *t, uint8_t typ)
4421
{
@@ -249,7 +226,7 @@ int table_init_block_reader(struct reftable_table *t, struct block_reader *br,
249226
}
250227

251228
if (block_size > guess_block_size) {
252-
reftable_block_done(&block);
229+
block_source_return_block(&block);
253230
err = table_get_block(t, &block, next_off, block_size);
254231
if (err < 0) {
255232
goto done;
@@ -259,7 +236,7 @@ int table_init_block_reader(struct reftable_table *t, struct block_reader *br,
259236
err = block_reader_init(br, &block, header_off, t->block_size,
260237
hash_size(t->hash_id));
261238
done:
262-
reftable_block_done(&block);
239+
block_source_return_block(&block);
263240

264241
return err;
265242
}
@@ -666,8 +643,8 @@ int reftable_table_new(struct reftable_table **out,
666643
*out = t;
667644

668645
done:
669-
reftable_block_done(&footer);
670-
reftable_block_done(&header);
646+
block_source_return_block(&footer);
647+
block_source_return_block(&header);
671648
if (err) {
672649
if (t)
673650
reftable_free(t->name);

reftable/table.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,6 @@
1414
#include "reftable-iterator.h"
1515
#include "reftable-table.h"
1616

17-
uint64_t block_source_size(struct reftable_block_source *source);
18-
19-
ssize_t block_source_read_block(struct reftable_block_source *source,
20-
struct reftable_block *dest, uint64_t off,
21-
uint32_t size);
22-
void block_source_close(struct reftable_block_source *source);
23-
2417
/* metadata for a block type */
2518
struct reftable_table_offsets {
2619
int is_present;

t/unit-tests/t-reftable-block.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ static void t_ref_block_read_write(void)
100100
block_reader_release(&br);
101101
block_iter_close(&it);
102102
reftable_record_release(&rec);
103-
reftable_block_done(&br.block);
103+
block_source_return_block(&br.block);
104104
reftable_buf_release(&want);
105105
reftable_buf_release(&buf);
106106
for (i = 0; i < N; i++)
@@ -190,7 +190,7 @@ static void t_log_block_read_write(void)
190190
block_reader_release(&br);
191191
block_iter_close(&it);
192192
reftable_record_release(&rec);
193-
reftable_block_done(&br.block);
193+
block_source_return_block(&br.block);
194194
reftable_buf_release(&want);
195195
reftable_buf_release(&buf);
196196
for (i = 0; i < N; i++)
@@ -273,7 +273,7 @@ static void t_obj_block_read_write(void)
273273
block_reader_release(&br);
274274
block_iter_close(&it);
275275
reftable_record_release(&rec);
276-
reftable_block_done(&br.block);
276+
block_source_return_block(&br.block);
277277
reftable_buf_release(&want);
278278
reftable_buf_release(&buf);
279279
for (i = 0; i < N; i++)
@@ -365,7 +365,7 @@ static void t_index_block_read_write(void)
365365
block_reader_release(&br);
366366
block_iter_close(&it);
367367
reftable_record_release(&rec);
368-
reftable_block_done(&br.block);
368+
block_source_return_block(&br.block);
369369
reftable_buf_release(&want);
370370
reftable_buf_release(&buf);
371371
for (i = 0; i < N; i++)

t/unit-tests/t-reftable-readwrite.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ static void t_buffer(void)
3232
n = block_source_read_block(&source, &out, 0, sizeof(in));
3333
check_int(n, ==, sizeof(in));
3434
check(!memcmp(in, out.data, n));
35-
reftable_block_done(&out);
35+
block_source_return_block(&out);
3636

3737
n = block_source_read_block(&source, &out, 1, 2);
3838
check_int(n, ==, 2);
3939
check(!memcmp(out.data, "el", 2));
4040

41-
reftable_block_done(&out);
41+
block_source_return_block(&out);
4242
block_source_close(&source);
4343
reftable_buf_release(&buf);
4444
}

0 commit comments

Comments
 (0)