git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Previous: shejialuoNext: Patrick Steinhardt
Message 20 of 21 in “Start compiling with `-Wsign-compare`”
  1. 00/14 Start compiling with `-Wsign-compare`Patrick Steinhardt, Dec 2, 2024
  2. 02/14 compat/regex: explicitly ignore "-Wsign-compare" warningsPatrick Steinhardt, Dec 2, 2024
  3. 03/14 compat/win32: fix -Wsign-compare warning in "wWinMain()"Patrick Steinhardt, Dec 2, 2024
  4. 01/14 git-compat-util: introduce macros to disable "-Wsign-compare" warningsPatrick Steinhardt, Dec 2, 2024
  5. 05/14 config.mak.dev: drop `-Wno-sign-compare`Patrick Steinhardt, Dec 2, 2024
  6. 04/14 global: mark code units that generate warnings with `-Wsign-compare`Patrick Steinhardt, Dec 2, 2024
  7. 06/14 diff.h: fix index used to loop through unsigned integerPatrick Steinhardt, Dec 2, 2024
  8. 08/14 daemon: fix loops that have mismatching integer typesPatrick Steinhardt, Dec 2, 2024
  9. 09/14 daemon: fix type of `max_connections`Patrick Steinhardt, Dec 2, 2024
  10. 07/14 global: trivial conversions to fix `-Wsign-compare` warningsPatrick Steinhardt, Dec 2, 2024
  11. Junio C HamanoDec 4, 2024
  12. 11/14 builtin/blame: fix type of `length` variable when emitting object IDPatrick Steinhardt, Dec 2, 2024
  13. 12/14 builtin/patch-id: fix type of `get_one_patchid()`Patrick Steinhardt, Dec 2, 2024
  14. shejialuoDec 2, 2024
  15. Patrick SteinhardtDec 2, 2024
  16. 13/14 scalar: address -Wsign-compare warningsPatrick Steinhardt, Dec 2, 2024
  17. 14/14 t/helper: don't depend on implicit wraparoundPatrick Steinhardt, Dec 2, 2024
  18. 10/14 gpg-interface: address -Wsign-comparison warningsPatrick Steinhardt, Dec 2, 2024
  19. shejialuoDec 2, 2024
  20. sign-compare: 32-bit supportJunio C Hamano, Dec 4, 2024
  21. Patrick SteinhardtDec 5, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.