[libc-commits] [libc] [libc] Add 'x' and 'e' mode support to fopen() (PR #224207)

Michael Jones via libc-commits libc-commits at lists.llvm.org
Thu Sep 17 09:53:30 PDT 2026


================
@@ -181,6 +189,45 @@ TEST(LlvmLibcFileModeTest, AllPossibleValidCombinations) {
   EXPECT_TRUE(append_update_binary.is_binary_format());
   EXPECT_TRUE(append_update_binary.write_allowed());
   EXPECT_TRUE(append_update_binary.read_allowed());
+
+  // 4. Close-on-exec: possible valid close-on-exec combinations
+
+  // a. Read Close-on-exec
+  constexpr FileMode read_close_on_exec("re");
+  EXPECT_TRUE(read_close_on_exec.is_valid());
+  EXPECT_TRUE(read_close_on_exec.is_read());
+  EXPECT_TRUE(read_close_on_exec.is_close_on_exec());
+  EXPECT_TRUE(read_close_on_exec.read_allowed());
+  EXPECT_FALSE(read_close_on_exec.write_allowed());
+  EXPECT_FALSE(read_close_on_exec.is_binary_format());
+  EXPECT_FALSE(read_close_on_exec.is_exclusive_create());
+
+  // b. Write Close-on-exec
+  constexpr FileMode write_close_on_exec("we");
+  EXPECT_TRUE(write_close_on_exec.is_valid());
+  EXPECT_TRUE(write_close_on_exec.is_write());
+  EXPECT_TRUE(write_close_on_exec.is_close_on_exec());
+  EXPECT_TRUE(write_close_on_exec.write_allowed());
+  EXPECT_FALSE(write_close_on_exec.read_allowed());
+
+  // c. Append Close-on-exec
+  constexpr FileMode append_close_on_exec("ae");
+  EXPECT_TRUE(append_close_on_exec.is_valid());
+  EXPECT_TRUE(append_close_on_exec.is_append());
+  EXPECT_TRUE(append_close_on_exec.is_close_on_exec());
+  EXPECT_TRUE(append_close_on_exec.write_allowed());
+  EXPECT_FALSE(append_close_on_exec.read_allowed());
+
+  // d. Write Close-on-exec Exclusive Update Binary
+  constexpr FileMode write_all_modifiers("wex+b");
+  EXPECT_TRUE(write_all_modifiers.is_valid());
+  EXPECT_TRUE(write_all_modifiers.is_write());
+  EXPECT_TRUE(write_all_modifiers.is_close_on_exec());
+  EXPECT_TRUE(write_all_modifiers.is_exclusive_create());
+  EXPECT_TRUE(write_all_modifiers.is_update());
+  EXPECT_TRUE(write_all_modifiers.is_binary_format());
+  EXPECT_TRUE(write_all_modifiers.read_allowed());
+  EXPECT_TRUE(write_all_modifiers.write_allowed());
----------------
michaelrj-google wrote:

this should probably go in its own `TEST()` for readability.

https://github.com/llvm/llvm-project/pull/224207


More information about the libc-commits mailing list