diff --git a/tests/fcntl_test.cpp b/tests/fcntl_test.cpp
index c1c586c..f8f559b 100644
--- a/tests/fcntl_test.cpp
+++ b/tests/fcntl_test.cpp
@@ -34,6 +34,8 @@
 #include <linux/magic.h>
 #endif
 
+#include "utils.h"
+
 using fcntl_DeathTest = SilentDeathTest;
 
 TEST(fcntl, fcntl_smoke) {
@@ -80,9 +82,9 @@
 
 TEST(fcntl, creat_creat64) {
   ASSERT_EQ(-1, creat("", 0666));
-  ASSERT_EQ(ENOENT, errno);
+  ASSERT_ERRNO(ENOENT);
   ASSERT_EQ(-1, creat64("", 0666));
-  ASSERT_EQ(ENOENT, errno);
+  ASSERT_ERRNO(ENOENT);
 }
 
 TEST(fcntl, posix_fadvise) {
@@ -90,16 +92,16 @@
   errno = 0;
 
   EXPECT_EQ(EBADF, posix_fadvise(-1, 0, 0, POSIX_FADV_NORMAL));
-  EXPECT_EQ(0, errno);
+  EXPECT_ERRNO(0);
 
   EXPECT_EQ(EBADF, posix_fadvise64(-1, 0, 0, POSIX_FADV_NORMAL));
-  EXPECT_EQ(0, errno);
+  EXPECT_ERRNO(0);
 
   EXPECT_EQ(EINVAL, posix_fadvise(tf.fd, 0, 0, -1));
-  EXPECT_EQ(0, errno);
+  EXPECT_ERRNO(0);
 
   EXPECT_EQ(EINVAL, posix_fadvise64(tf.fd, 0, 0, -1));
-  EXPECT_EQ(0, errno);
+  EXPECT_ERRNO(0);
 
   EXPECT_EQ(0, posix_fadvise(tf.fd, 0, 0, POSIX_FADV_NORMAL));
   EXPECT_EQ(0, posix_fadvise64(tf.fd, 0, 0, POSIX_FADV_NORMAL));
@@ -113,19 +115,19 @@
 
   errno = 0;
   ASSERT_EQ(-1, fallocate(tf.fd, 0, 0, -1));
-  ASSERT_EQ(EINVAL, errno);
+  ASSERT_ERRNO(EINVAL);
 
   errno = 0;
   ASSERT_EQ(-1, fallocate64(tf.fd, 0, 0, -1));
-  ASSERT_EQ(EINVAL, errno);
+  ASSERT_ERRNO(EINVAL);
 
   errno = 0;
   ASSERT_EQ(EINVAL, posix_fallocate(tf.fd, 0, -1));
-  ASSERT_EQ(0, errno);
+  ASSERT_ERRNO(0);
 
   errno = 0;
   ASSERT_EQ(EINVAL, posix_fallocate64(tf.fd, 0, -1));
-  ASSERT_EQ(0, errno);
+  ASSERT_ERRNO(0);
 }
 
 TEST(fcntl, fallocate) {
@@ -269,14 +271,14 @@
   // Just check that the function is available.
   errno = 0;
   ASSERT_EQ(-1, readahead(-1, 0, 123));
-  ASSERT_EQ(EBADF, errno);
+  ASSERT_ERRNO(EBADF);
 }
 
 TEST(fcntl, sync_file_range) {
   // Just check that the function is available.
   errno = 0;
   ASSERT_EQ(-1, sync_file_range(-1, 0, 0, 0));
-  ASSERT_EQ(EBADF, errno);
+  ASSERT_ERRNO(EBADF);
 
   TemporaryFile tf;
   ASSERT_EQ(0, sync_file_range(tf.fd, 0, 0, 0));
@@ -285,7 +287,7 @@
   // Check that the `flags` argument gets passed to the kernel correctly.
   errno = 0;
   ASSERT_EQ(-1, sync_file_range(tf.fd, 0, 0, ~0));
-  ASSERT_EQ(EINVAL, errno);
+  ASSERT_ERRNO(EINVAL);
 }
 
 static bool parse_kernel_release(long* const major, long* const minor) {
@@ -312,7 +314,7 @@
     ASSERT_EQ(0, fstatfs(tf.fd, &sfs));
     if (sfs.f_type == EXT4_SUPER_MAGIC) {
       ASSERT_EQ(-1, fallocate(tf.fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 1));
-      ASSERT_EQ(errno, EOPNOTSUPP);
+      ASSERT_ERRNO(EOPNOTSUPP);
     }
   }
 }
@@ -355,7 +357,7 @@
   ASSERT_EQ(-1, linkat(AT_FDCWD, android::base::StringPrintf("/proc/self/fd/%d", fd).c_str(),
                        AT_FDCWD, android::base::StringPrintf("%s/no_chance", dir.path).c_str(),
                        AT_SYMLINK_FOLLOW));
-  ASSERT_EQ(ENOENT, errno);
+  ASSERT_ERRNO(ENOENT);
   ASSERT_EQ(0, close(fd));
 #endif
 }
