Linux-EROFS Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Gao Xiang <xiang@kernel.org>
To: linux-erofs@lists.ozlabs.org
Cc: Gao Xiang <xiang@kernel.org>
Subject: [PATCH] erofs-utils: avoid unsigned long if possible (incomplete)
Date: Wed,  7 Oct 2026 21:49:49 +0200	[thread overview]
Message-ID: <20261007194949.15224-1-xiang@kernel.org> (raw)

long is always 32 bits on Windows, even on 64-bit systems.

Link: https://github.com/chenxiaolong/erofs-utils/commit/becfc45e8372992d96bea103e1284875a397111e
Link: https://github.com/erofs/go-erofs/blob/main/.github/workflows/patches/erofs-utils/001-windows.patch
Signed-off-by: Gao Xiang <xiang@kernel.org>
---
 include/erofs/err.h      |  9 +++++----
 include/erofs/internal.h |  2 +-
 lib/dedupe.c             | 31 +++++++++++++++----------------
 lib/inode.c              |  4 ++--
 lib/kite_deflate.c       |  3 +--
 5 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/include/erofs/err.h b/include/erofs/err.h
index 28de701..1d18d54 100644
--- a/include/erofs/err.h
+++ b/include/erofs/err.h
@@ -13,6 +13,7 @@ extern "C"
 #endif
 
 #include <errno.h>
+#include <stdint.h>
 #include <string.h>
 #include <stdio.h>
 
@@ -30,7 +31,7 @@ static inline const char *erofs_strerror(int err)
 
 #define MAX_ERRNO (4095)
 #define IS_ERR_VALUE(x)                                                        \
-	((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
+	((uintptr_t)(void *)(x) >= (uintptr_t)-MAX_ERRNO)
 
 static inline void *ERR_PTR(long error)
 {
@@ -39,18 +40,18 @@ static inline void *ERR_PTR(long error)
 
 static inline int IS_ERR(const void *ptr)
 {
-	return IS_ERR_VALUE((unsigned long)ptr);
+	return IS_ERR_VALUE((uintptr_t)ptr);
 }
 
 static inline long PTR_ERR(const void *ptr)
 {
-	return (long) ptr;
+	return (intptr_t)ptr;
 }
 
 static inline void * ERR_CAST(const void *ptr)
 {
 	/* cast away the const */
-	return (void *) ptr;
+	return (void *)ptr;
 }
 
 /* EROFS-specific error codes */
diff --git a/include/erofs/internal.h b/include/erofs/internal.h
index d905077..19e38fb 100644
--- a/include/erofs/internal.h
+++ b/include/erofs/internal.h
@@ -348,7 +348,7 @@ static inline unsigned int erofs_inode_datalayout(unsigned int ifmt)
 
 static inline struct erofs_inode *erofs_parent_inode(struct erofs_inode *inode)
 {
-	return (struct erofs_inode *)((unsigned long)inode->i_parent & ~1UL);
+	return (struct erofs_inode *)((uintptr_t)inode->i_parent & ~(uintptr_t)1);
 }
 
 #define IS_ROOT(x)	((x) == erofs_parent_inode(x))
diff --git a/lib/dedupe.c b/lib/dedupe.c
index ec9e2bb..b242f7d 100644
--- a/lib/dedupe.c
+++ b/lib/dedupe.c
@@ -9,18 +9,17 @@
 #include "liberofs_xxhash.h"
 #include "liberofs_sha256.h"
 
-unsigned long erofs_memcmp2(const u8 *s1, const u8 *s2,
-			    unsigned long sz)
+uintptr_t erofs_memcmp2(const u8 *s1, const u8 *s2, uintptr_t sz)
 {
-	const unsigned long *a1, *a2;
-	unsigned long n = sz;
+	const uintptr_t *a1, *a2;
+	uintptr_t n = sz;
 
-	if (sz < sizeof(long))
+	if (sz < sizeof(uintptr_t))
 		goto out_bytes;
 
-	if (((long)s1 & (sizeof(long) - 1)) ==
-			((long)s2 & (sizeof(long) - 1))) {
-		while ((long)s1 & (sizeof(long) - 1)) {
+	if (((uintptr_t)s1 & (sizeof(uintptr_t) - 1)) ==
+			((uintptr_t)s2 & (sizeof(uintptr_t) - 1))) {
+		while ((uintptr_t)s1 & (sizeof(uintptr_t) - 1)) {
 			if (*s1 != *s2)
 				break;
 			++s1;
@@ -28,25 +27,25 @@ unsigned long erofs_memcmp2(const u8 *s1, const u8 *s2,
 			--sz;
 		}
 
-		a1 = (const unsigned long *)s1;
-		a2 = (const unsigned long *)s2;
-		while (sz >= sizeof(long)) {
+		a1 = (const uintptr_t *)s1;
+		a2 = (const uintptr_t *)s2;
+		while (sz >= sizeof(uintptr_t)) {
 			if (*a1 != *a2)
 				break;
 			++a1;
 			++a2;
-			sz -= sizeof(long);
+			sz -= sizeof(uintptr_t);
 		}
 	} else {
-		a1 = (const unsigned long *)s1;
-		a2 = (const unsigned long *)s2;
+		a1 = (const uintptr_t *)s1;
+		a2 = (const uintptr_t *)s2;
 		do {
 			if (get_unaligned(a1) != get_unaligned(a2))
 				break;
 			++a1;
 			++a2;
-			sz -= sizeof(long);
-		} while (sz >= sizeof(long));
+			sz -= sizeof(uintptr_t);
+		} while (sz >= sizeof(uintptr_t));
 	}
 	s1 = (const u8 *)a1;
 	s2 = (const u8 *)a2;
diff --git a/lib/inode.c b/lib/inode.c
index 489c44e..d819659 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -2169,13 +2169,13 @@ static int erofs_mkfs_handle_inode(const struct erofs_mkfs_btctx *ctx,
 
 static bool erofs_inode_visited(struct erofs_inode *inode)
 {
-	return (unsigned long)inode->i_parent & 1UL;
+	return (uintptr_t)inode->i_parent & 1;
 }
 
 static void erofs_mark_parent_inode(struct erofs_inode *inode,
 				    struct erofs_inode *dir)
 {
-	inode->i_parent = (void *)((unsigned long)dir | 1);
+	inode->i_parent = (void *)((uintptr_t)dir | 1);
 }
 
 static int erofs_mkfs_dump_tree(const struct erofs_mkfs_btctx *ctx)
diff --git a/lib/kite_deflate.c b/lib/kite_deflate.c
index c1d3c6d..67b01c9 100644
--- a/lib/kite_deflate.c
+++ b/lib/kite_deflate.c
@@ -13,8 +13,7 @@
 #include <ctype.h>
 #include <stdio.h>
 
-unsigned long erofs_memcmp2(const u8 *s1, const u8 *s2,
-			    unsigned long sz);
+uintptr_t erofs_memcmp2(const u8 *s1, const u8 *s2, uintptr_t sz);
 
 #ifdef TEST
 #define kite_dbg(x, ...)	fprintf(stderr, x "\n", ##__VA_ARGS__)
-- 
2.50.1 (Apple Git-155)



                 reply	other threads:[~2026-10-07 19:50 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261007194949.15224-1-xiang@kernel.org \
    --to=xiang@kernel.org \
    --cc=linux-erofs@lists.ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox