Hi Alexander,

On Tue, Apr 29, 2025 at 09:30:52AM +0200, Alexander Egorenkov wrote:
> From: Super User <r...@a8345034.lnxne.boe>

Thanks for catching this, the "From:" line seems invalid, so
I change it as "From: Alexander Egorenkov <egore...@linux.ibm.com>"

> 
> Macros __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN are defined in
> user space header 'endian.h'. Not including this header results in
> the condition #if __BYTE_ORDER == __LITTLE_ENDIAN being always true, even on
> BE architectures (e.g. s390x). Due to this bug the compressor library was
> built for LE byte-order on BE arch s390x.
> 
> Fixes: bc99c763e3fe ("erofs-utils: switch to effective unaligned access")
> Signed-off-by: Alexander Egorenkov <egore...@linux.ibm.com>
> ---
>  include/erofs/defs.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/erofs/defs.h b/include/erofs/defs.h
> index 051a270531ca..196dfa8191a8 100644
> --- a/include/erofs/defs.h
> +++ b/include/erofs/defs.h
> @@ -19,6 +19,7 @@ extern "C"
>  #include <inttypes.h>
>  #include <limits.h>
>  #include <stdbool.h>
> +#include <endian.h>

I guess it could break MacOS compilation, so I update as below:

>From d55344291092b69a2ba6f11dbcda52fa534ac124 Mon Sep 17 00:00:00 2001
From: Alexander Egorenkov <egore...@linux.ibm.com>
Date: Tue, 29 Apr 2025 09:30:52 +0200
Subject: [PATCH] erofs-utils: fix endiannes issue

Macros __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN are defined in
user space header 'endian.h'. Not including this header results in
the condition #if __BYTE_ORDER == __LITTLE_ENDIAN being always true,
even on BE architectures (e.g. s390x). Due to this bug the compressor
library was built for LE byte-order on BE arch s390x.

Fixes: bc99c763e3fe ("erofs-utils: switch to effective unaligned access")
Signed-off-by: Alexander Egorenkov <egore...@linux.ibm.com>
Reviewed-by: Ian Kent <ra...@themaw.net>
Reviewed-by: Hongbo Li <lihongb...@huawei.com>
Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com>
---
 configure.ac         |  1 +
 include/erofs/defs.h | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/configure.ac b/configure.ac
index 6e1e7a1..88f1cbe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -194,6 +194,7 @@ AC_ARG_WITH(selinux,
 AC_CHECK_HEADERS(m4_flatten([
        dirent.h
        execinfo.h
+       endian.h
        fcntl.h
        getopt.h
        inttypes.h
diff --git a/include/erofs/defs.h b/include/erofs/defs.h
index 051a270..21e0f09 100644
--- a/include/erofs/defs.h
+++ b/include/erofs/defs.h
@@ -24,6 +24,21 @@ extern "C"
 #include <config.h>
 #endif
 
+#ifdef HAVE_ENDIAN_H
+#include <endian.h>
+#else
+/* Use GNU C predefined macros as a fallback */
+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER   __BYTE_ORDER__
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN        __ORDER_LITTLE_ENDIAN__
+#endif
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN   __ORDER_BIG_ENDIAN__
+#endif
+#endif
+
 #ifdef HAVE_LINUX_TYPES_H
 #include <linux/types.h>
 #endif
-- 
2.30.2


Reply via email to