[PATCH] sign-compare: 32-bit support
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Dec 4, 2024, 05:47 UTC
- Message-ID
- <xmqq4j3k3sph.fsf_-_@gitster.g>
- In-Reply-To
- <20241202-pks-sign-compare-v2-0-e7f0ad92a749@pks.im>
On 32-bit platforms, ssize_t may be "int" while size_t may be "unsigned int". At times we compare the number of bytes we read stored in a ssize_t variable with "unsigned int", but that is done after we check that we did not get an error return (which is negative---and that is the whole reason why we used ssize_t and not size_t), so these comparisons are safe.
But compilers may not realize that. Cast these to size_t to work around the false positives. On platforms with size_t/ssize_t wider than a normal int, this won't be an issue.
Signed-off-by: Junio C Hamano <gitster@pobox.com> ---
* These were needed to make linux32 CI job compile the -Wsign-compare topic cleanly.
csum-file.c | 2 +- pkt-line.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/csum-file.c b/csum-file.c index c203ebf11b..c8ec7b73e6 100644 --- a/csum-file.c +++ b/csum-file.c @@ -23,7 +23,7 @@ static void verify_buffer_or_die(struct hashfile *f, if (ret < 0) die_errno("%s: sha1 file read error", f->name); - if (ret != count) + if ((size_t)ret != (size_t)count) die("%s: sha1 file truncated", f->name); if (memcmp(buf, f->check_buffer, count)) die("sha1 file '%s' validation error", f->name); diff --git a/pkt-line.c b/pkt-line.c index 1c7e8d826d..a2bce206c2 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -360,7 +360,7 @@ static int get_packet_data(int fd, char **src_buf, size_t *src_size, } /* And complain if we didn't get enough bytes to satisfy the read. */ - if (ret != size) { + if ((size_t)ret != (size_t)size) { if (options & PACKET_READ_GENTLE_ON_EOF) return -1;
-- 2.47.1-574-g3b2d6bb55a