[libcxx-commits] [libcxx] r372027 - Open fstream files in O_CLOEXEC mode when possible.
Dan Albert via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Sep 16 12:26:42 PDT 2019
Author: danalbert
Date: Mon Sep 16 12:26:41 2019
New Revision: 372027
URL: http://llvm.org/viewvc/llvm-project?rev=372027&view=rev
Log:
Open fstream files in O_CLOEXEC mode when possible.
Reviewers: EricWF, mclow.lists, ldionne
Reviewed By: ldionne
Subscribers: smeenai, dexonsmith, christof, ldionne, libcxx-commits
Tags: #libc
Differential Revision: https://reviews.llvm.org/D59839
Modified:
libcxx/trunk/include/__config
libcxx/trunk/include/fstream
Modified: libcxx/trunk/include/__config
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=372027&r1=372026&r2=372027&view=diff
==============================================================================
--- libcxx/trunk/include/__config (original)
+++ libcxx/trunk/include/__config Mon Sep 16 12:26:41 2019
@@ -1447,6 +1447,17 @@ _LIBCPP_FUNC_VIS extern "C" void __sanit
#define _LIBCPP_UNUSED_VAR(x) ((void)(x))
+// Configures the fopen close-on-exec mode character, if any. This string will
+// be appended to any mode string used by fstream for fopen/fdopen.
+//
+// Not all platforms support this, but it helps avoid fd-leaks on platforms that
+// do.
+#if defined(__BIONIC__)
+# define _LIBCPP_FOPEN_CLOEXEC_MODE "e"
+#else
+# define _LIBCPP_FOPEN_CLOEXEC_MODE
+#endif
+
#endif // __cplusplus
#endif // _LIBCPP_CONFIG
Modified: libcxx/trunk/include/fstream
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/fstream?rev=372027&r1=372026&r2=372027&view=diff
==============================================================================
--- libcxx/trunk/include/fstream (original)
+++ libcxx/trunk/include/fstream Mon Sep 16 12:26:41 2019
@@ -508,34 +508,34 @@ const char* basic_filebuf<_CharT, _Trait
switch (__mode & ~ios_base::ate) {
case ios_base::out:
case ios_base::out | ios_base::trunc:
- return "w";
+ return "w" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::out | ios_base::app:
case ios_base::app:
- return "a";
+ return "a" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in:
- return "r";
+ return "r" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::out:
- return "r+";
+ return "r+" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::out | ios_base::trunc:
- return "w+";
+ return "w+" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::out | ios_base::app:
case ios_base::in | ios_base::app:
- return "a+";
+ return "a+" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::out | ios_base::binary:
case ios_base::out | ios_base::trunc | ios_base::binary:
- return "wb";
+ return "wb" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::out | ios_base::app | ios_base::binary:
case ios_base::app | ios_base::binary:
- return "ab";
+ return "ab" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::binary:
- return "rb";
+ return "rb" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::out | ios_base::binary:
- return "r+b";
+ return "r+b" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary:
- return "w+b";
+ return "w+b" _LIBCPP_FOPEN_CLOEXEC_MODE;
case ios_base::in | ios_base::out | ios_base::app | ios_base::binary:
case ios_base::in | ios_base::app | ios_base::binary:
- return "a+b";
+ return "a+b" _LIBCPP_FOPEN_CLOEXEC_MODE;
default:
return nullptr;
}
More information about the libcxx-commits
mailing list