Keeping 'struct timespec' and 'struct __kernel_timespec' compatible allows the source code to stay simple.
Validate that the types stay compatible.
Signed-off-by: Thomas Weißschuh linux@weissschuh.net --- tools/testing/selftests/nolibc/nolibc-test.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c index f1d6d6c766dd..938af8d6e2bf 100644 --- a/tools/testing/selftests/nolibc/nolibc-test.c +++ b/tools/testing/selftests/nolibc/nolibc-test.c @@ -1428,6 +1428,23 @@ int test_difftime(void) return 0; }
+int test_timespec(void) +{ + struct __kernel_timespec kts; + struct timespec ts; + + if (sizeof(ts) != sizeof(kts)) + return 1; + + if (!__builtin_types_compatible_p(__typeof__(ts.tv_sec), __typeof__(kts.tv_sec))) + return 1; + + if (!__builtin_types_compatible_p(__typeof__(ts.tv_nsec), __typeof__(kts.tv_nsec))) + return 1; + + return 0; +} + int run_stdlib(int min, int max) { int test; @@ -1551,6 +1568,7 @@ int run_stdlib(int min, int max) CASE_TEST(abs); EXPECT_EQ(1, abs(-10), 10); break; CASE_TEST(abs_noop); EXPECT_EQ(1, abs(10), 10); break; CASE_TEST(difftime); EXPECT_ZR(1, test_difftime()); break; + CASE_TEST(test_timespec); EXPECT_ZR(1, test_timespec()); break;
case __LINE__: return ret; /* must be last */