summaryrefslogtreecommitdiffstats
path: root/contrib/restricted/boost/filesystem/src/posix_tools.hpp
diff options
context:
space:
mode:
authorvitalyisaev <[email protected]>2023-11-14 09:58:56 +0300
committervitalyisaev <[email protected]>2023-11-14 10:20:20 +0300
commitc2b2dfd9827a400a8495e172a56343462e3ceb82 (patch)
treecd4e4f597d01bede4c82dffeb2d780d0a9046bd0 /contrib/restricted/boost/filesystem/src/posix_tools.hpp
parentd4ae8f119e67808cb0cf776ba6e0cf95296f2df7 (diff)
YQ Connector: move tests from yql to ydb (OSS)
Перенос папки с тестами на Коннектор из папки yql в папку ydb (синхронизируется с github).
Diffstat (limited to 'contrib/restricted/boost/filesystem/src/posix_tools.hpp')
-rw-r--r--contrib/restricted/boost/filesystem/src/posix_tools.hpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/contrib/restricted/boost/filesystem/src/posix_tools.hpp b/contrib/restricted/boost/filesystem/src/posix_tools.hpp
new file mode 100644
index 00000000000..52cd87b0a02
--- /dev/null
+++ b/contrib/restricted/boost/filesystem/src/posix_tools.hpp
@@ -0,0 +1,81 @@
+// posix_tools.hpp -------------------------------------------------------------------//
+
+// Copyright 2021 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_SRC_POSIX_TOOLS_HPP_
+#define BOOST_FILESYSTEM_SRC_POSIX_TOOLS_HPP_
+
+#include "platform_config.hpp"
+#include <cerrno>
+#include <boost/filesystem/config.hpp>
+#ifdef BOOST_HAS_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <boost/filesystem/detail/header.hpp> // must be the last #include
+
+namespace boost {
+namespace filesystem {
+namespace detail {
+
+//! Platform-specific parameters for directory iterator construction
+struct directory_iterator_params
+{
+#if defined(BOOST_FILESYSTEM_HAS_POSIX_AT_APIS)
+ //! File descriptor of the base directory relative to which to interpret relative paths
+ int basedir_fd;
+#endif
+#if defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW)
+ //! File descriptor of the directory over which the iterator iterates
+ int iterator_fd;
+#endif
+};
+
+/*!
+ * Closes a file descriptor and returns the result, similar to close(2). Unlike close(2), guarantees that the file descriptor is closed even if EINTR error happens.
+ *
+ * Some systems don't close the file descriptor in case if the thread is interrupted by a signal and close(2) returns EINTR.
+ * Other (most) systems do close the file descriptor even when when close(2) returns EINTR, and attempting to close it
+ * again could close a different file descriptor that was opened by a different thread. This function hides this difference in behavior.
+ *
+ * Future POSIX standards will likely fix this by introducing posix_close (see https://www.austingroupbugs.net/view.php?id=529)
+ * and prohibiting returning EINTR from close(2), but we still have to support older systems where this new behavior is not available and close(2)
+ * behaves differently between systems.
+ */
+inline int close_fd(int fd)
+{
+#if defined(hpux) || defined(_hpux) || defined(__hpux)
+ int res;
+ while (true)
+ {
+ res = ::close(fd);
+ if (BOOST_UNLIKELY(res < 0))
+ {
+ int err = errno;
+ if (err == EINTR)
+ continue;
+ }
+
+ break;
+ }
+
+ return res;
+#else
+ return ::close(fd);
+#endif
+}
+
+} // namespace detail
+} // namespace filesystem
+} // namespace boost
+
+#include <boost/filesystem/detail/footer.hpp>
+
+#endif // BOOST_FILESYSTEM_SRC_POSIX_TOOLS_HPP_