Subject: Re: [PATCH v2 2/6] bswap.h: Add support for __BYTE_ORDER__

From: Junio C Hamano <[email-masked]>
Date: Thu, 12 Jun 2025 13:10:15 -0700

Sebastian Andrzej Siewior <[email-masked]> writes:

> The __BYTE_ORDER__ define is provided by gcc (since ~v4.6), clang
> (since ~v3.2) and icc (since ~16.0.3). It is not provided by msvc as of
> v19.43 / 17.13.6.

I think it is more confusing than illuninating to have the last
sentence in the above paragraph.  There probably are tons of other
compilers that do not support it, and this patch does not target any
of them, including MSVC, which is the topic of the next step anyway.

So, I'm inclined to just remove the sentence, or replace it with
something like "Even recent versions of MSVC do not support it,
which will be dealt with in the next patch."

> The __BYTE_ORDER and BYTE_ORDER macros are libc specific and are not
> available on all supported platforms such as mingw.
>
> Add support for the __BYTE_ORDER__ macro as a fallback.
>
> Signed-off-by: Sebastian Andrzej Siewior <[email-masked]>
> ---
>  compat/bswap.h | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/compat/bswap.h b/compat/bswap.h
> index b34054f2bd728..0a457542dd76a 100644
> --- a/compat/bswap.h
> +++ b/compat/bswap.h
> @@ -116,6 +116,12 @@ static inline uint64_t git_bswap64(uint64_t x)
>  # define GIT_LITTLE_ENDIAN LITTLE_ENDIAN
>  # define GIT_BIG_ENDIAN BIG_ENDIAN
>  
> +#elif defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__)
> +
> +# define GIT_BYTE_ORDER __BYTE_ORDER__
> +# define GIT_LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
> +# define GIT_BIG_ENDIAN __ORDER_BIG_ENDIAN__
> +
>  #else
>  
>  # define GIT_BIG_ENDIAN 4321