You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2014/10/17 01:52:31 UTC
git commit: Refactored stout os open/close/fcntl.
Repository: mesos
Updated Branches:
refs/heads/master d10ac8e0b -> f47dfb726
Refactored stout os open/close/fcntl.
Review: https://reviews.apache.org/r/26843
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f47dfb72
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f47dfb72
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f47dfb72
Branch: refs/heads/master
Commit: f47dfb726fb8bfaf7dac468a3d98f40918e06196
Parents: d10ac8e
Author: Jie Yu <yu...@gmail.com>
Authored: Thu Oct 16 16:28:23 2014 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Oct 16 16:52:13 2014 -0700
----------------------------------------------------------------------
.../3rdparty/stout/include/Makefile.am | 3 +
.../3rdparty/stout/include/stout/os.hpp | 123 +------------------
.../3rdparty/stout/include/stout/os/close.hpp | 37 ++++++
.../3rdparty/stout/include/stout/os/fcntl.hpp | 86 +++++++++++++
.../3rdparty/stout/include/stout/os/open.hpp | 84 +++++++++++++
5 files changed, 213 insertions(+), 120 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/f47dfb72/3rdparty/libprocess/3rdparty/stout/include/Makefile.am
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/Makefile.am b/3rdparty/libprocess/3rdparty/stout/include/Makefile.am
index d4a8ad4..d529013 100644
--- a/3rdparty/libprocess/3rdparty/stout/include/Makefile.am
+++ b/3rdparty/libprocess/3rdparty/stout/include/Makefile.am
@@ -37,12 +37,15 @@ nobase_include_HEADERS = \
stout/numify.hpp \
stout/option.hpp \
stout/os.hpp \
+ stout/os/close.hpp \
stout/os/execenv.hpp \
stout/os/exists.hpp \
+ stout/os/fcntl.hpp \
stout/os/fork.hpp \
stout/os/killtree.hpp \
stout/os/linux.hpp \
stout/os/ls.hpp \
+ stout/os/open.hpp \
stout/os/osx.hpp \
stout/os/process.hpp \
stout/os/read.hpp \
http://git-wip-us.apache.org/repos/asf/mesos/blob/f47dfb72/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
index c26bd2a..63bda7a 100644
--- a/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
@@ -19,7 +19,6 @@
#endif
#include <dirent.h>
#include <errno.h>
-#include <fcntl.h>
#include <fts.h>
#include <glob.h>
#include <libgen.h>
@@ -67,13 +66,16 @@
#include <stout/unreachable.hpp>
#include <stout/version.hpp>
+#include <stout/os/close.hpp>
#include <stout/os/exists.hpp>
+#include <stout/os/fcntl.hpp>
#include <stout/os/fork.hpp>
#include <stout/os/killtree.hpp>
#ifdef __linux__
#include <stout/os/linux.hpp>
#endif // __linux__
#include <stout/os/ls.hpp>
+#include <stout/os/open.hpp>
#ifdef __APPLE__
#include <stout/os/osx.hpp>
#endif // __APPLE__
@@ -209,125 +211,6 @@ inline Try<bool> access(const std::string& path, int how)
}
-inline Try<Nothing> cloexec(int fd)
-{
- int flags = ::fcntl(fd, F_GETFD);
-
- if (flags == -1) {
- return ErrnoError();
- }
-
- if (::fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) {
- return ErrnoError();
- }
-
- return Nothing();
-}
-
-
-inline Try<bool> isCloexec(int fd)
-{
- int flags = ::fcntl(fd, F_GETFD);
-
- if (flags == -1) {
- return ErrnoError();
- }
-
- return (flags & FD_CLOEXEC) != 0;
-}
-
-
-inline Try<Nothing> nonblock(int fd)
-{
- int flags = ::fcntl(fd, F_GETFL);
-
- if (flags == -1) {
- return ErrnoError();
- }
-
- if (::fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
- return ErrnoError();
- }
-
- return Nothing();
-}
-
-
-inline Try<bool> isNonblock(int fd)
-{
- int flags = ::fcntl(fd, F_GETFL);
-
- if (flags == -1) {
- return ErrnoError();
- }
-
- return (flags & O_NONBLOCK) != 0;
-}
-
-
-// For old systems that do not support O_CLOEXEC, we still want
-// os::open to accept that flag so that we can simplify the code.
-// TODO(jieyu): Move this along with nonblock/cloexec to a separate
-// header 'stout/fcntl.hpp'.
-#ifndef O_CLOEXEC
-// Since we will define O_CLOEXEC if it is not yet defined, we use a
-// special symbol to tell if the flag is truly unavailable or not.
-#define O_CLOEXEC_UNDEFINED
-
-// NOTE: For backward compatibility concern, kernel usually does not
-// change the constant values for symbols like O_CLOEXEC.
-#if defined(__APPLE__)
-// Copied from '/usr/include/sys/fcntl.h'
-#define O_CLOEXEC 0x1000000
-#elif defined(__linux__)
-// Copied from '/usr/include/asm-generic/fcntl.h'.
-#define O_CLOEXEC 02000000
-#endif
-#endif
-
-
-inline Try<int> open(const std::string& path, int oflag, mode_t mode = 0)
-{
-#ifdef O_CLOEXEC_UNDEFINED
- // Before we passing oflag to ::open, we need to strip the O_CLOEXEC
- // flag since it's not supported.
- bool cloexec = false;
- if ((oflag & O_CLOEXEC) != 0) {
- oflag &= ~O_CLOEXEC;
- cloexec = true;
- }
-#endif
-
- int fd = ::open(path.c_str(), oflag, mode);
-
- if (fd < 0) {
- return ErrnoError();
- }
-
-#ifdef O_CLOEXEC_UNDEFINED
- if (cloexec) {
- Try<Nothing> result = os::cloexec(fd);
- if (result.isError()) {
- os::close(fd);
- return Error("Failed to set cloexec: " + result.error());
- }
- }
-#endif
-
- return fd;
-}
-
-
-inline Try<Nothing> close(int fd)
-{
- if (::close(fd) != 0) {
- return ErrnoError();
- }
-
- return Nothing();
-}
-
-
// Sets the access and modification times of 'path' to the current time.
inline Try<Nothing> utime(const std::string& path)
{
http://git-wip-us.apache.org/repos/asf/mesos/blob/f47dfb72/3rdparty/libprocess/3rdparty/stout/include/stout/os/close.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/os/close.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/os/close.hpp
new file mode 100644
index 0000000..fad82e8
--- /dev/null
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/os/close.hpp
@@ -0,0 +1,37 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __STOUT_OS_CLOSE_HPP__
+#define __STOUT_OS_CLOSE_HPP__
+
+#include <unistd.h>
+
+#include <stout/error.hpp>
+#include <stout/nothing.hpp>
+#include <stout/try.hpp>
+
+namespace os {
+
+inline Try<Nothing> close(int fd)
+{
+ if (::close(fd) != 0) {
+ return ErrnoError();
+ }
+
+ return Nothing();
+}
+
+} // namespace os {
+
+#endif // __STOUT_OS_CLOSE_HPP__
http://git-wip-us.apache.org/repos/asf/mesos/blob/f47dfb72/3rdparty/libprocess/3rdparty/stout/include/stout/os/fcntl.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/os/fcntl.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/os/fcntl.hpp
new file mode 100644
index 0000000..bc8ffed
--- /dev/null
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/os/fcntl.hpp
@@ -0,0 +1,86 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __STOUT_OS_FCNTL_HPP__
+#define __STOUT_OS_FCNTL_HPP__
+
+#include <fcntl.h>
+
+#include <stout/error.hpp>
+#include <stout/nothing.hpp>
+#include <stout/try.hpp>
+
+// TODO(jieyu): Consider introducing a general os::fcntl function
+// which allows us to get/set multiple flags in one call.
+
+namespace os {
+
+inline Try<Nothing> cloexec(int fd)
+{
+ int flags = ::fcntl(fd, F_GETFD);
+
+ if (flags == -1) {
+ return ErrnoError();
+ }
+
+ if (::fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) {
+ return ErrnoError();
+ }
+
+ return Nothing();
+}
+
+
+inline Try<bool> isCloexec(int fd)
+{
+ int flags = ::fcntl(fd, F_GETFD);
+
+ if (flags == -1) {
+ return ErrnoError();
+ }
+
+ return (flags & FD_CLOEXEC) != 0;
+}
+
+
+inline Try<Nothing> nonblock(int fd)
+{
+ int flags = ::fcntl(fd, F_GETFL);
+
+ if (flags == -1) {
+ return ErrnoError();
+ }
+
+ if (::fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
+ return ErrnoError();
+ }
+
+ return Nothing();
+}
+
+
+inline Try<bool> isNonblock(int fd)
+{
+ int flags = ::fcntl(fd, F_GETFL);
+
+ if (flags == -1) {
+ return ErrnoError();
+ }
+
+ return (flags & O_NONBLOCK) != 0;
+}
+
+} // namespace os {
+
+#endif // __STOUT_OS_FCNTL_HPP__
http://git-wip-us.apache.org/repos/asf/mesos/blob/f47dfb72/3rdparty/libprocess/3rdparty/stout/include/stout/os/open.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/os/open.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/os/open.hpp
new file mode 100644
index 0000000..86949ec
--- /dev/null
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/os/open.hpp
@@ -0,0 +1,84 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __STOUT_OS_OPEN_HPP__
+#define __STOUT_OS_OPEN_HPP__
+
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <string>
+
+#include <stout/error.hpp>
+#include <stout/nothing.hpp>
+#include <stout/try.hpp>
+
+#include <stout/os/close.hpp>
+#include <stout/os/fcntl.hpp>
+
+namespace os {
+
+// For old systems that do not support O_CLOEXEC, we still want
+// os::open to accept that flag so that we can simplify the code.
+#ifndef O_CLOEXEC
+// Since we will define O_CLOEXEC if it is not yet defined, we use a
+// special symbol to tell if the flag is truly unavailable or not.
+#define O_CLOEXEC_UNDEFINED
+
+// NOTE: For backward compatibility concern, kernel usually does not
+// change the constant values for symbols like O_CLOEXEC.
+#if defined(__APPLE__)
+// Copied from '/usr/include/sys/fcntl.h'
+#define O_CLOEXEC 0x1000000
+#elif defined(__linux__)
+// Copied from '/usr/include/asm-generic/fcntl.h'.
+#define O_CLOEXEC 02000000
+#endif
+#endif
+
+
+inline Try<int> open(const std::string& path, int oflag, mode_t mode = 0)
+{
+#ifdef O_CLOEXEC_UNDEFINED
+ // Before we passing oflag to ::open, we need to strip the O_CLOEXEC
+ // flag since it's not supported.
+ bool cloexec = false;
+ if ((oflag & O_CLOEXEC) != 0) {
+ oflag &= ~O_CLOEXEC;
+ cloexec = true;
+ }
+#endif
+
+ int fd = ::open(path.c_str(), oflag, mode);
+
+ if (fd < 0) {
+ return ErrnoError();
+ }
+
+#ifdef O_CLOEXEC_UNDEFINED
+ if (cloexec) {
+ Try<Nothing> result = os::cloexec(fd);
+ if (result.isError()) {
+ os::close(fd);
+ return Error("Failed to set cloexec: " + result.error());
+ }
+ }
+#endif
+
+ return fd;
+}
+
+} // namespace os {
+
+#endif // __STOUT_OS_OPEN_HPP__