[PATCH v3] bulk-checkin: fix sign compare warnings
- From
Tuomas Ahola <taahol@utu.fi>
- Date
- Mar 24, 2025, 21:47 UTC
- Message-ID
- <20250324214703.7547-1-taahol@utu.fi>
- In-Reply-To
- <20250321200715.3338-1-taahol@utu.fi>
In file bulk-checkin.c, three warnings are emitted by "-Wsign-compare", two of which are caused by trivial loop iterator type mismatches. For the third case, the type of `rsize` from
ssize_t rsize = size < sizeof(ibuf) ? size : sizeof(ibuf);
can be changed to size_t as both options of the ternary expression are unsigned and the signedness of the variable isn't really needed anywhere.
To prevent `read_result != rsize` making a clash, it is to be noted that `read_result` is checked not to hold negative values. Therefore casting the variable to size_t is a safe operation and enough to remove the sign-compare warning.
Fix issues accordingly, and remove `DISABLE_SIGN_COMPARE_WARNINGS` to enable "-Wsign-compare" for the file.
Signed-off-by: Tuomas Ahola <taahol@utu.fi> ---
Notes:
Okay, I think I got it know. Thanks for bearing with me.
Range-diff against v2:
## bulk-checkin.c ##
@@
*/
@@ bulk-checkin.c: static void flush_batch_fsync(void)
return 1;
@@ bulk-checkin.c: static int stream_blob_to_pack(struct bulk_checkin_packfile *state,
+
+ while (status != Z_STREAM_END) {
+ if (size && !s.avail_in) {
+- ssize_t rsize = size < sizeof(ibuf) ? size : sizeof(ibuf);
++ size_t rsize = size < sizeof(ibuf) ? size : sizeof(ibuf);
+ ssize_t read_result = read_in_full(fd, ibuf, rsize);
+ if (read_result < 0)
+ die_errno("failed to read from '%s'", path);
+- if (read_result != rsize)
+- die("failed to read %d bytes from '%s'",
+- (int)rsize, path);
++ if ((size_t)read_result != rsize)
++ die("failed to read %u bytes from '%s'",
++ (unsigned)rsize, path);
offset += rsize;
if (*already_hashed_to < offset) {
size_t hsize = offset - *already_hashed_to;
-- if (rsize < hsize)
-+ if ((size_t)rsize < hsize)
- hsize = rsize;
- if (hsize)
- git_hash_update(ctx, ibuf, hsize);bulk-checkin.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/bulk-checkin.c b/bulk-checkin.c index 20f2da67b9..a5a3395188 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -3,7 +3,6 @@ */ #define USE_THE_REPOSITORY_VARIABLE -#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "bulk-checkin.h" @@ -56,7 +55,6 @@ static void flush_bulk_checkin_packfile(struct bulk_checkin_packfile *state) { unsigned char hash[GIT_MAX_RAWSZ]; struct strbuf packname = STRBUF_INIT; - int i; if (!state->f) return; @@ -82,7 +80,7 @@ static void flush_bulk_checkin_packfile(struct bulk_checkin_packfile *state) finish_tmp_packfile(&packname, state->pack_tmp_name, state->written, state->nr_written, &state->pack_idx_opts, hash); - for (i = 0; i < state->nr_written; i++) + for (uint32_t i = 0; i < state->nr_written; i++) free(state->written[i]); clear_exit: @@ -131,14 +129,12 @@ static void flush_batch_fsync(void) static int already_written(struct bulk_checkin_packfile *state, struct object_id *oid) { - int i; - /* The object may already exist in the repository */ if (repo_has_object_file(the_repository, oid)) return 1; /* Might want to keep the list sorted */ - for (i = 0; i < state->nr_written; i++) + for (uint32_t i = 0; i < state->nr_written; i++) if (oideq(&state->written[i]->oid, oid)) return 1; @@ -182,13 +178,13 @@ static int stream_blob_to_pack(struct bulk_checkin_packfile *state, while (status != Z_STREAM_END) { if (size && !s.avail_in) { - ssize_t rsize = size < sizeof(ibuf) ? size : sizeof(ibuf); + size_t rsize = size < sizeof(ibuf) ? size : sizeof(ibuf); ssize_t read_result = read_in_full(fd, ibuf, rsize); if (read_result < 0) die_errno("failed to read from '%s'", path); - if (read_result != rsize) - die("failed to read %d bytes from '%s'", - (int)rsize, path); + if ((size_t)read_result != rsize) + die("failed to read %u bytes from '%s'", + (unsigned)rsize, path); offset += rsize; if (*already_hashed_to < offset) { size_t hsize = offset - *already_hashed_to; base-commit: 683c54c999c301c2cd6f715c411407c413b1d84e
-- 2.30.2