Skip to content

Commit 57adf71

Browse files
pks-tgitster
authored andcommitted
reftable/basics: adjust hash_size() to return uint32_t
The `hash_size()` function returns the number of bytes used by the hash function. Weirdly enough though, it returns a signed integer for its size even though the size obviously cannot ever be negative. The only case where it could be negative is if the function returned an error when asked for an unknown hash, but we assert(3p) instead. Adjust the type of `hash_size()` to be `uint32_t` and adapt all places that use signed integers for the hash size to follow suit. This also allows us to get rid of a couple asserts that we had which verified that the size was indeed positive, which further stresses the point that this refactoring makes sense. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5ac65f0 commit 57adf71

File tree

9 files changed

+44
-50
lines changed

9 files changed

+44
-50
lines changed

reftable/basics.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b)
272272
return p;
273273
}
274274

275-
int hash_size(enum reftable_hash id)
275+
uint32_t hash_size(enum reftable_hash id)
276276
{
277277
if (!id)
278278
return REFTABLE_HASH_SIZE_SHA1;

reftable/basics.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ static inline void *reftable_alloc_grow(void *p, size_t nelem, size_t elsize,
171171
/* Find the longest shared prefix size of `a` and `b` */
172172
size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
173173

174-
int hash_size(enum reftable_hash id);
174+
uint32_t hash_size(enum reftable_hash id);
175175

176176
/*
177177
* Format IDs that identify the hash function used by a reftable. Note that

reftable/block.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ static int block_writer_register_restart(struct block_writer *w, int n,
7272
}
7373

7474
int block_writer_init(struct block_writer *bw, uint8_t typ, uint8_t *block,
75-
uint32_t block_size, uint32_t header_off, int hash_size)
75+
uint32_t block_size, uint32_t header_off, uint32_t hash_size)
7676
{
7777
bw->block = block;
7878
bw->hash_size = hash_size;
@@ -214,7 +214,7 @@ int block_writer_finish(struct block_writer *w)
214214

215215
int block_reader_init(struct block_reader *br, struct reftable_block *block,
216216
uint32_t header_off, uint32_t table_block_size,
217-
int hash_size)
217+
uint32_t hash_size)
218218
{
219219
uint32_t full_block_size = table_block_size;
220220
uint8_t typ = block->data[header_off];

reftable/block.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ struct block_writer {
3030

3131
/* How often to restart keys. */
3232
uint16_t restart_interval;
33-
int hash_size;
33+
uint32_t hash_size;
3434

3535
/* Offset of next uint8_t to write. */
3636
uint32_t next;
@@ -48,7 +48,7 @@ struct block_writer {
4848
* initializes the blockwriter to write `typ` entries, using `block` as temporary
4949
* storage. `block` is not owned by the block_writer. */
5050
int block_writer_init(struct block_writer *bw, uint8_t typ, uint8_t *block,
51-
uint32_t block_size, uint32_t header_off, int hash_size);
51+
uint32_t block_size, uint32_t header_off, uint32_t hash_size);
5252

5353
/* returns the block type (eg. 'r' for ref records. */
5454
uint8_t block_writer_type(struct block_writer *bw);
@@ -72,7 +72,7 @@ struct block_reader {
7272

7373
/* the memory block */
7474
struct reftable_block block;
75-
int hash_size;
75+
uint32_t hash_size;
7676

7777
/* Uncompressed data for log entries. */
7878
z_stream *zstream;
@@ -92,7 +92,7 @@ struct block_reader {
9292
/* initializes a block reader. */
9393
int block_reader_init(struct block_reader *br, struct reftable_block *bl,
9494
uint32_t header_off, uint32_t table_block_size,
95-
int hash_size);
95+
uint32_t hash_size);
9696

9797
void block_reader_release(struct block_reader *br);
9898

@@ -108,7 +108,7 @@ struct block_iter {
108108
uint32_t next_off;
109109
const unsigned char *block;
110110
size_t block_len;
111-
int hash_size;
111+
uint32_t hash_size;
112112

113113
/* key for last entry we read. */
114114
struct reftable_buf last_key;

reftable/reader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
750750
struct table_iter *ti;
751751
struct filtering_ref_iterator *filter = NULL;
752752
struct filtering_ref_iterator empty = FILTERING_REF_ITERATOR_INIT;
753-
int oid_len = hash_size(r->hash_id);
753+
uint32_t oid_len = hash_size(r->hash_id);
754754
int err;
755755

756756
REFTABLE_ALLOC_ARRAY(ti, 1);

reftable/record.c

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -229,16 +229,14 @@ static int reftable_ref_record_key(const void *r, struct reftable_buf *dest)
229229
}
230230

231231
static int reftable_ref_record_copy_from(void *rec, const void *src_rec,
232-
int hash_size)
232+
uint32_t hash_size)
233233
{
234234
struct reftable_ref_record *ref = rec;
235235
const struct reftable_ref_record *src = src_rec;
236236
char *refname = NULL;
237237
size_t refname_cap = 0;
238238
int err;
239239

240-
assert(hash_size > 0);
241-
242240
SWAP(refname, ref->refname);
243241
SWAP(refname_cap, ref->refname_cap);
244242
reftable_ref_record_release(ref);
@@ -319,13 +317,12 @@ static uint8_t reftable_ref_record_val_type(const void *rec)
319317
}
320318

321319
static int reftable_ref_record_encode(const void *rec, struct string_view s,
322-
int hash_size)
320+
uint32_t hash_size)
323321
{
324322
const struct reftable_ref_record *r =
325323
(const struct reftable_ref_record *)rec;
326324
struct string_view start = s;
327325
int n = put_var_int(&s, r->update_index);
328-
assert(hash_size > 0);
329326
if (n < 0)
330327
return -1;
331328
string_view_consume(&s, n);
@@ -365,7 +362,7 @@ static int reftable_ref_record_encode(const void *rec, struct string_view s,
365362

366363
static int reftable_ref_record_decode(void *rec, struct reftable_buf key,
367364
uint8_t val_type, struct string_view in,
368-
int hash_size, struct reftable_buf *scratch)
365+
uint32_t hash_size, struct reftable_buf *scratch)
369366
{
370367
struct reftable_ref_record *r = rec;
371368
struct string_view start = in;
@@ -374,8 +371,6 @@ static int reftable_ref_record_decode(void *rec, struct reftable_buf key,
374371
size_t refname_cap = 0;
375372
int n, err;
376373

377-
assert(hash_size > 0);
378-
379374
n = get_var_int(&update_index, &in);
380375
if (n < 0)
381376
return n;
@@ -451,7 +446,7 @@ static int reftable_ref_record_is_deletion_void(const void *p)
451446
}
452447

453448
static int reftable_ref_record_equal_void(const void *a,
454-
const void *b, int hash_size)
449+
const void *b, uint32_t hash_size)
455450
{
456451
struct reftable_ref_record *ra = (struct reftable_ref_record *) a;
457452
struct reftable_ref_record *rb = (struct reftable_ref_record *) b;
@@ -495,7 +490,7 @@ static void reftable_obj_record_release(void *rec)
495490
}
496491

497492
static int reftable_obj_record_copy_from(void *rec, const void *src_rec,
498-
int hash_size UNUSED)
493+
uint32_t hash_size UNUSED)
499494
{
500495
struct reftable_obj_record *obj = rec;
501496
const struct reftable_obj_record *src = src_rec;
@@ -527,7 +522,7 @@ static uint8_t reftable_obj_record_val_type(const void *rec)
527522
}
528523

529524
static int reftable_obj_record_encode(const void *rec, struct string_view s,
530-
int hash_size UNUSED)
525+
uint32_t hash_size UNUSED)
531526
{
532527
const struct reftable_obj_record *r = rec;
533528
struct string_view start = s;
@@ -562,7 +557,7 @@ static int reftable_obj_record_encode(const void *rec, struct string_view s,
562557

563558
static int reftable_obj_record_decode(void *rec, struct reftable_buf key,
564559
uint8_t val_type, struct string_view in,
565-
int hash_size UNUSED,
560+
uint32_t hash_size UNUSED,
566561
struct reftable_buf *scratch UNUSED)
567562
{
568563
struct string_view start = in;
@@ -626,7 +621,7 @@ static int not_a_deletion(const void *p UNUSED)
626621
}
627622

628623
static int reftable_obj_record_equal_void(const void *a, const void *b,
629-
int hash_size UNUSED)
624+
uint32_t hash_size UNUSED)
630625
{
631626
struct reftable_obj_record *ra = (struct reftable_obj_record *) a;
632627
struct reftable_obj_record *rb = (struct reftable_obj_record *) b;
@@ -701,7 +696,7 @@ static int reftable_log_record_key(const void *r, struct reftable_buf *dest)
701696
}
702697

703698
static int reftable_log_record_copy_from(void *rec, const void *src_rec,
704-
int hash_size)
699+
uint32_t hash_size)
705700
{
706701
struct reftable_log_record *dst = rec;
707702
const struct reftable_log_record *src =
@@ -782,7 +777,7 @@ static uint8_t reftable_log_record_val_type(const void *rec)
782777
}
783778

784779
static int reftable_log_record_encode(const void *rec, struct string_view s,
785-
int hash_size)
780+
uint32_t hash_size)
786781
{
787782
const struct reftable_log_record *r = rec;
788783
struct string_view start = s;
@@ -830,7 +825,7 @@ static int reftable_log_record_encode(const void *rec, struct string_view s,
830825

831826
static int reftable_log_record_decode(void *rec, struct reftable_buf key,
832827
uint8_t val_type, struct string_view in,
833-
int hash_size, struct reftable_buf *scratch)
828+
uint32_t hash_size, struct reftable_buf *scratch)
834829
{
835830
struct string_view start = in;
836831
struct reftable_log_record *r = rec;
@@ -978,7 +973,7 @@ static int null_streq(const char *a, const char *b)
978973
}
979974

980975
static int reftable_log_record_equal_void(const void *a,
981-
const void *b, int hash_size)
976+
const void *b, uint32_t hash_size)
982977
{
983978
return reftable_log_record_equal((struct reftable_log_record *) a,
984979
(struct reftable_log_record *) b,
@@ -1002,7 +997,7 @@ static int reftable_log_record_cmp_void(const void *_a, const void *_b)
1002997
}
1003998

1004999
int reftable_log_record_equal(const struct reftable_log_record *a,
1005-
const struct reftable_log_record *b, int hash_size)
1000+
const struct reftable_log_record *b, uint32_t hash_size)
10061001
{
10071002
if (!(null_streq(a->refname, b->refname) &&
10081003
a->update_index == b->update_index &&
@@ -1056,7 +1051,7 @@ static int reftable_index_record_key(const void *r, struct reftable_buf *dest)
10561051
}
10571052

10581053
static int reftable_index_record_copy_from(void *rec, const void *src_rec,
1059-
int hash_size UNUSED)
1054+
uint32_t hash_size UNUSED)
10601055
{
10611056
struct reftable_index_record *dst = rec;
10621057
const struct reftable_index_record *src = src_rec;
@@ -1083,7 +1078,7 @@ static uint8_t reftable_index_record_val_type(const void *rec UNUSED)
10831078
}
10841079

10851080
static int reftable_index_record_encode(const void *rec, struct string_view out,
1086-
int hash_size UNUSED)
1081+
uint32_t hash_size UNUSED)
10871082
{
10881083
const struct reftable_index_record *r =
10891084
(const struct reftable_index_record *)rec;
@@ -1101,7 +1096,7 @@ static int reftable_index_record_encode(const void *rec, struct string_view out,
11011096
static int reftable_index_record_decode(void *rec, struct reftable_buf key,
11021097
uint8_t val_type UNUSED,
11031098
struct string_view in,
1104-
int hash_size UNUSED,
1099+
uint32_t hash_size UNUSED,
11051100
struct reftable_buf *scratch UNUSED)
11061101
{
11071102
struct string_view start = in;
@@ -1122,7 +1117,7 @@ static int reftable_index_record_decode(void *rec, struct reftable_buf key,
11221117
}
11231118

11241119
static int reftable_index_record_equal(const void *a, const void *b,
1125-
int hash_size UNUSED)
1120+
uint32_t hash_size UNUSED)
11261121
{
11271122
struct reftable_index_record *ia = (struct reftable_index_record *) a;
11281123
struct reftable_index_record *ib = (struct reftable_index_record *) b;
@@ -1156,14 +1151,14 @@ int reftable_record_key(struct reftable_record *rec, struct reftable_buf *dest)
11561151
}
11571152

11581153
int reftable_record_encode(struct reftable_record *rec, struct string_view dest,
1159-
int hash_size)
1154+
uint32_t hash_size)
11601155
{
11611156
return reftable_record_vtable(rec)->encode(reftable_record_data(rec),
11621157
dest, hash_size);
11631158
}
11641159

11651160
int reftable_record_copy_from(struct reftable_record *rec,
1166-
struct reftable_record *src, int hash_size)
1161+
struct reftable_record *src, uint32_t hash_size)
11671162
{
11681163
assert(src->type == rec->type);
11691164

@@ -1178,7 +1173,7 @@ uint8_t reftable_record_val_type(struct reftable_record *rec)
11781173
}
11791174

11801175
int reftable_record_decode(struct reftable_record *rec, struct reftable_buf key,
1181-
uint8_t extra, struct string_view src, int hash_size,
1176+
uint8_t extra, struct string_view src, uint32_t hash_size,
11821177
struct reftable_buf *scratch)
11831178
{
11841179
return reftable_record_vtable(rec)->decode(reftable_record_data(rec),
@@ -1205,15 +1200,15 @@ int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b)
12051200
reftable_record_data(a), reftable_record_data(b));
12061201
}
12071202

1208-
int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size)
1203+
int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, uint32_t hash_size)
12091204
{
12101205
if (a->type != b->type)
12111206
return 0;
12121207
return reftable_record_vtable(a)->equal(
12131208
reftable_record_data(a), reftable_record_data(b), hash_size);
12141209
}
12151210

1216-
static int hash_equal(const unsigned char *a, const unsigned char *b, int hash_size)
1211+
static int hash_equal(const unsigned char *a, const unsigned char *b, uint32_t hash_size)
12171212
{
12181213
if (a && b)
12191214
return !memcmp(a, b, hash_size);
@@ -1222,9 +1217,8 @@ static int hash_equal(const unsigned char *a, const unsigned char *b, int hash_s
12221217
}
12231218

12241219
int reftable_ref_record_equal(const struct reftable_ref_record *a,
1225-
const struct reftable_ref_record *b, int hash_size)
1220+
const struct reftable_ref_record *b, uint32_t hash_size)
12261221
{
1227-
assert(hash_size > 0);
12281222
if (!null_streq(a->refname, b->refname))
12291223
return 0;
12301224

reftable/record.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,18 @@ struct reftable_record_vtable {
4747
/* The record type of ('r' for ref). */
4848
uint8_t type;
4949

50-
int (*copy_from)(void *dest, const void *src, int hash_size);
50+
int (*copy_from)(void *dest, const void *src, uint32_t hash_size);
5151

5252
/* a value of [0..7], indicating record subvariants (eg. ref vs. symref
5353
* vs ref deletion) */
5454
uint8_t (*val_type)(const void *rec);
5555

5656
/* encodes rec into dest, returning how much space was used. */
57-
int (*encode)(const void *rec, struct string_view dest, int hash_size);
57+
int (*encode)(const void *rec, struct string_view dest, uint32_t hash_size);
5858

5959
/* decode data from `src` into the record. */
6060
int (*decode)(void *rec, struct reftable_buf key, uint8_t extra,
61-
struct string_view src, int hash_size,
61+
struct string_view src, uint32_t hash_size,
6262
struct reftable_buf *scratch);
6363

6464
/* deallocate and null the record. */
@@ -68,7 +68,7 @@ struct reftable_record_vtable {
6868
int (*is_deletion)(const void *rec);
6969

7070
/* Are two records equal? This assumes they have the same type. Returns 0 for non-equal. */
71-
int (*equal)(const void *a, const void *b, int hash_size);
71+
int (*equal)(const void *a, const void *b, uint32_t hash_size);
7272

7373
/*
7474
* Compare keys of two records with each other. The records must have
@@ -135,16 +135,16 @@ void reftable_record_init(struct reftable_record *rec, uint8_t typ);
135135

136136
/* see struct record_vtable */
137137
int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b);
138-
int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size);
138+
int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, uint32_t hash_size);
139139
int reftable_record_key(struct reftable_record *rec, struct reftable_buf *dest);
140140
int reftable_record_copy_from(struct reftable_record *rec,
141-
struct reftable_record *src, int hash_size);
141+
struct reftable_record *src, uint32_t hash_size);
142142
uint8_t reftable_record_val_type(struct reftable_record *rec);
143143
int reftable_record_encode(struct reftable_record *rec, struct string_view dest,
144-
int hash_size);
144+
uint32_t hash_size);
145145
int reftable_record_decode(struct reftable_record *rec, struct reftable_buf key,
146146
uint8_t extra, struct string_view src,
147-
int hash_size, struct reftable_buf *scratch);
147+
uint32_t hash_size, struct reftable_buf *scratch);
148148
int reftable_record_is_deletion(struct reftable_record *rec);
149149

150150
static inline uint8_t reftable_record_type(struct reftable_record *rec)

reftable/reftable-record.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ void reftable_ref_record_release(struct reftable_ref_record *ref);
6565

6666
/* returns whether two reftable_ref_records are the same. Useful for testing. */
6767
int reftable_ref_record_equal(const struct reftable_ref_record *a,
68-
const struct reftable_ref_record *b, int hash_size);
68+
const struct reftable_ref_record *b, uint32_t hash_size);
6969

7070
/* reftable_log_record holds a reflog entry */
7171
struct reftable_log_record {
@@ -105,6 +105,6 @@ void reftable_log_record_release(struct reftable_log_record *log);
105105

106106
/* returns whether two records are equal. Useful for testing. */
107107
int reftable_log_record_equal(const struct reftable_log_record *a,
108-
const struct reftable_log_record *b, int hash_size);
108+
const struct reftable_log_record *b, uint32_t hash_size);
109109

110110
#endif

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ static void t_varint_overflow(void)
7676

7777
static void set_hash(uint8_t *h, int j)
7878
{
79-
for (int i = 0; i < hash_size(REFTABLE_HASH_SHA1); i++)
79+
for (size_t i = 0; i < hash_size(REFTABLE_HASH_SHA1); i++)
8080
h[i] = (j >> i) & 0xff;
8181
}
8282

0 commit comments

Comments
 (0)