1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
From 9421d5c9f6a3190f68675796d88677fc1ebaae50 Mon Sep 17 00:00:00 2001
From: Ben Boeckel <ben.boeckel@kitware.com>
Date: Tue, 15 Jul 2025 00:09:28 -0400
Subject: [PATCH] deps_log_test: support big endian architectures
---
src/deps_log_test.cc | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/src/deps_log_test.cc b/src/deps_log_test.cc
index 6476843f7f..62192b099e 100644
--- a/src/deps_log_test.cc
+++ b/src/deps_log_test.cc
@@ -566,15 +566,30 @@ TEST_F(DepsLogTest, MalformedDepsLog) {
const size_t version_offset = 12;
ASSERT_EQ("# ninjadeps\n", original_contents.substr(0, version_offset));
+#if defined(_WIN32) || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
ASSERT_EQ('\x04', original_contents[version_offset + 0]);
ASSERT_EQ('\x00', original_contents[version_offset + 1]);
ASSERT_EQ('\x00', original_contents[version_offset + 2]);
ASSERT_EQ('\x00', original_contents[version_offset + 3]);
+#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ ASSERT_EQ('\x00', original_contents[version_offset + 0]);
+ ASSERT_EQ('\x00', original_contents[version_offset + 1]);
+ ASSERT_EQ('\x00', original_contents[version_offset + 2]);
+ ASSERT_EQ('\x04', original_contents[version_offset + 3]);
+#else
+# error "Unknown endianness."
+#endif
// clang-format off
static const uint8_t kFirstRecord[] = {
// size field == 0x0000000c
+#if defined(_WIN32) || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
0x0c, 0x00, 0x00, 0x00,
+#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ 0x00, 0x00, 0x00, 0x0c,
+#else
+# error "Unknown endianness."
+#endif
// name field = 'out.o' + 3 bytes of padding.
'o', 'u', 't', '.', 'o', 0x00, 0x00, 0x00,
// checksum = ~0
@@ -593,11 +608,23 @@ TEST_F(DepsLogTest, MalformedDepsLog) {
// clang-format off
static const uint8_t kSecondRecord[] = {
// size field == 0x0000000c
+#if defined(_WIN32) || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
0x0c, 0x00, 0x00, 0x00,
+#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ 0x00, 0x00, 0x00, 0x0c,
+#else
+# error "Unknown endianness."
+#endif
// name field = 'foo.hh' + 2 bytes of padding.
'f', 'o', 'o', '.', 'h', 'h', 0x00, 0x00,
// checksum = ~1
+#if defined(_WIN32) || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
0xfe, 0xff, 0xff, 0xff,
+#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ 0xff, 0xff, 0xff, 0xfe,
+#else
+# error "Unknown endianness."
+#endif
};
// clang-format on
const size_t kSecondRecordLen = sizeof(kSecondRecord);
@@ -650,10 +677,19 @@ TEST_F(DepsLogTest, MalformedDepsLog) {
// Corrupt first record |size| value.
bad_contents = original_contents;
+#if defined(_WIN32) || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
bad_contents[first_offset + 0] = '\x55';
bad_contents[first_offset + 1] = '\xaa';
bad_contents[first_offset + 2] = '\xff';
bad_contents[first_offset + 3] = '\xff';
+#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ bad_contents[first_offset + 0] = '\xff';
+ bad_contents[first_offset + 1] = '\xff';
+ bad_contents[first_offset + 2] = '\xaa';
+ bad_contents[first_offset + 3] = '\x55';
+#else
+# error "Unknown endianness."
+#endif
ASSERT_TRUE(write_bad_log_file(bad_contents)) << strerror(errno);
{
State state;
|