In sha1dc/sha1.c, we #define BIGENDIAN under certain circumstances, and obviously leave the door open for scenarios where our conditions do not catch and that constant is #defined elsewhere. However, we did not expect that anybody would possibly #define BIGENDIAN to 0, indicating that the current platform is *not* big endian. This is not just a theoretical consideration: On Windows, the winsock2.h header file (which is used to allow Git to communicate via network) does indeed do this. Let's test for that circumstance, too, and byte-swap as intended in that case. This fixes a massive breakage on Windows where current `pu` (having switched on DC_SHA1 by default) breaks pretty much every single test case. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- sha1dc/sha1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c index 6dd0da36084..d99db4f2e1b 100644 --- a/sha1dc/sha1.c +++ b/sha1dc/sha1.c @@ -35,7 +35,7 @@ #define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1)) -#if defined(BIGENDIAN) +#if defined(BIGENDIAN) && BIGENDIAN != 0 #define sha1_load(m, t, temp) { temp = m[t]; } #else #define sha1_load(m, t, temp) { temp = m[t]; sha1_bswap32(temp); } -- 2.12.1.windows.1