Skip to content

Commit 1f2bc6b

Browse files
derrickstoleegitster
authored andcommitted
midx-write: reenable signed comparison errors
Remove the remaining signed comparison warnings in midx-write.c so that they can be enforced as errors in the future. After the previous change, the remaining errors are due to iterator variables named 'i'. The strategy here involves defining the variable within the for loop syntax to make sure we use the appropriate bitness for the loop sentinel. This matters in at least one method where the variable was compared to uint32_t in some loops and size_t in others. While adjusting these loops, there were some where the loop boundary was checking against a uint32_t value _plus one_. These were replaced with non-strict comparisons, but also the value is checked to not be UINT32_MAX. Since the value is the number of incremental multi-pack- indexes, this is not a meaningful restriction. The new die() is about defensive programming more than it being realistically possible. Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 68383ac commit 1f2bc6b

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

midx-write.c

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#define DISABLE_SIGN_COMPARE_WARNINGS
2-
31
#include "git-compat-util.h"
42
#include "abspath.h"
53
#include "config.h"
@@ -845,7 +843,7 @@ static int write_midx_bitmap(struct write_midx_context *ctx,
845843
uint32_t commits_nr,
846844
unsigned flags)
847845
{
848-
int ret, i;
846+
int ret;
849847
uint16_t options = 0;
850848
struct bitmap_writer writer;
851849
struct pack_idx_entry **index;
@@ -873,7 +871,7 @@ static int write_midx_bitmap(struct write_midx_context *ctx,
873871
* this order).
874872
*/
875873
ALLOC_ARRAY(index, pdata->nr_objects);
876-
for (i = 0; i < pdata->nr_objects; i++)
874+
for (uint32_t i = 0; i < pdata->nr_objects; i++)
877875
index[i] = &pdata->objects[i].idx;
878876

879877
bitmap_writer_init(&writer, ctx->repo, pdata,
@@ -894,7 +892,7 @@ static int write_midx_bitmap(struct write_midx_context *ctx,
894892
* happens between bitmap_writer_build_type_index() and
895893
* bitmap_writer_finish().
896894
*/
897-
for (i = 0; i < pdata->nr_objects; i++)
895+
for (uint32_t i = 0; i < pdata->nr_objects; i++)
898896
index[ctx->pack_order[i]] = &pdata->objects[i].idx;
899897

900898
bitmap_writer_select_commits(&writer, commits, commits_nr);
@@ -1056,7 +1054,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
10561054
{
10571055
struct strbuf midx_name = STRBUF_INIT;
10581056
unsigned char midx_hash[GIT_MAX_RAWSZ];
1059-
uint32_t i, start_pack;
1057+
uint32_t start_pack;
10601058
struct hashfile *f = NULL;
10611059
struct lock_file lk;
10621060
struct tempfile *incr;
@@ -1172,7 +1170,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
11721170
if (preferred_pack_name) {
11731171
ctx.preferred_pack_idx = NO_PREFERRED_PACK;
11741172

1175-
for (i = 0; i < ctx.nr; i++) {
1173+
for (size_t i = 0; i < ctx.nr; i++) {
11761174
if (!cmp_idx_or_pack_name(preferred_pack_name,
11771175
ctx.info[i].pack_name)) {
11781176
ctx.preferred_pack_idx = i;
@@ -1204,7 +1202,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
12041202
* pack-order has all of its objects selected from that pack
12051203
* (and not another pack containing a duplicate)
12061204
*/
1207-
for (i = 1; i < ctx.nr; i++) {
1205+
for (size_t i = 1; i < ctx.nr; i++) {
12081206
struct packed_git *p = ctx.info[i].p;
12091207

12101208
if (!oldest->num_objects || p->mtime < oldest->mtime) {
@@ -1249,7 +1247,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
12491247
compute_sorted_entries(&ctx, start_pack);
12501248

12511249
ctx.large_offsets_needed = 0;
1252-
for (i = 0; i < ctx.entries_nr; i++) {
1250+
for (size_t i = 0; i < ctx.entries_nr; i++) {
12531251
if (ctx.entries[i].offset > 0x7fffffff)
12541252
ctx.num_large_offsets++;
12551253
if (ctx.entries[i].offset > 0xffffffff)
@@ -1259,10 +1257,10 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
12591257
QSORT(ctx.info, ctx.nr, pack_info_compare);
12601258

12611259
if (packs_to_drop && packs_to_drop->nr) {
1262-
int drop_index = 0;
1260+
size_t drop_index = 0;
12631261
int missing_drops = 0;
12641262

1265-
for (i = 0; i < ctx.nr && drop_index < packs_to_drop->nr; i++) {
1263+
for (size_t i = 0; i < ctx.nr && drop_index < packs_to_drop->nr; i++) {
12661264
int cmp = strcmp(ctx.info[i].pack_name,
12671265
packs_to_drop->items[drop_index].string);
12681266

@@ -1293,7 +1291,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
12931291
* pack_perm[old_id] = new_id
12941292
*/
12951293
ALLOC_ARRAY(ctx.pack_perm, ctx.nr);
1296-
for (i = 0; i < ctx.nr; i++) {
1294+
for (size_t i = 0; i < ctx.nr; i++) {
12971295
if (ctx.info[i].expired) {
12981296
dropped_packs++;
12991297
ctx.pack_perm[ctx.info[i].orig_pack_int_id] = PACK_EXPIRED;
@@ -1302,7 +1300,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
13021300
}
13031301
}
13041302

1305-
for (i = 0; i < ctx.nr; i++) {
1303+
for (size_t i = 0; i < ctx.nr; i++) {
13061304
if (ctx.info[i].expired)
13071305
continue;
13081306
pack_name_concat_len += strlen(ctx.info[i].pack_name) + 1;
@@ -1448,6 +1446,9 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
14481446
* have been freed in the previous if block.
14491447
*/
14501448

1449+
if (ctx.num_multi_pack_indexes_before == UINT32_MAX)
1450+
die(_("too many multi-pack-indexes"));
1451+
14511452
CALLOC_ARRAY(keep_hashes, ctx.num_multi_pack_indexes_before + 1);
14521453

14531454
if (ctx.incremental) {
@@ -1480,15 +1481,15 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
14801481
keep_hashes[ctx.num_multi_pack_indexes_before] =
14811482
xstrdup(hash_to_hex_algop(midx_hash, r->hash_algo));
14821483

1483-
for (i = 0; i < ctx.num_multi_pack_indexes_before; i++) {
1484+
for (uint32_t i = 0; i < ctx.num_multi_pack_indexes_before; i++) {
14841485
uint32_t j = ctx.num_multi_pack_indexes_before - i - 1;
14851486

14861487
keep_hashes[j] = xstrdup(hash_to_hex_algop(get_midx_checksum(m),
14871488
r->hash_algo));
14881489
m = m->base_midx;
14891490
}
14901491

1491-
for (i = 0; i < ctx.num_multi_pack_indexes_before + 1; i++)
1492+
for (uint32_t i = 0; i <= ctx.num_multi_pack_indexes_before; i++)
14921493
fprintf(get_lock_file_fp(&lk), "%s\n", keep_hashes[i]);
14931494
} else {
14941495
keep_hashes[ctx.num_multi_pack_indexes_before] =
@@ -1506,7 +1507,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
15061507
ctx.incremental);
15071508

15081509
cleanup:
1509-
for (i = 0; i < ctx.nr; i++) {
1510+
for (size_t i = 0; i < ctx.nr; i++) {
15101511
if (ctx.info[i].p) {
15111512
close_pack(ctx.info[i].p);
15121513
free(ctx.info[i].p);
@@ -1519,7 +1520,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir,
15191520
free(ctx.pack_perm);
15201521
free(ctx.pack_order);
15211522
if (keep_hashes) {
1522-
for (i = 0; i < ctx.num_multi_pack_indexes_before + 1; i++)
1523+
for (uint32_t i = 0; i <= ctx.num_multi_pack_indexes_before; i++)
15231524
free((char *)keep_hashes[i]);
15241525
free(keep_hashes);
15251526
}

0 commit comments

Comments
 (0)