$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r63829 - in sandbox/SOC/2010/process: boost/process boost/process/detail libs/process/example
From: boris_at_[hidden]
Date: 2010-07-10 18:20:43
Author: bschaeling
Date: 2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
New Revision: 63829
URL: http://svn.boost.org/trac/boost/changeset/63829
Log:
Quick review
Text files modified: 
   sandbox/SOC/2010/process/boost/process/child.hpp                 |     4 --                                      
   sandbox/SOC/2010/process/boost/process/detail/win32_helpers.hpp  |     1                                         
   sandbox/SOC/2010/process/boost/process/operations.hpp            |    37 +++++++++++---------------              
   sandbox/SOC/2010/process/boost/process/status.hpp                |    54 ----------------------------------------
   sandbox/SOC/2010/process/boost/process/stream_behavior.hpp       |     3 --                                      
   sandbox/SOC/2010/process/libs/process/example/create_process.cpp |     1                                         
   6 files changed, 17 insertions(+), 83 deletions(-)
Modified: sandbox/SOC/2010/process/boost/process/child.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/child.hpp	(original)
+++ sandbox/SOC/2010/process/boost/process/child.hpp	2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
@@ -22,10 +22,6 @@
 #include <boost/process/config.hpp>
 
 #if defined(BOOST_POSIX_API)
-#   include <boost/process/pipe.hpp>
-#   include <boost/process/detail/posix_helpers.hpp>
-#   include <map>
-#   include <unistd.h>
 #elif defined(BOOST_WINDOWS_API)
 #   include <windows.h>
 #else
Modified: sandbox/SOC/2010/process/boost/process/detail/win32_helpers.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/detail/win32_helpers.hpp	(original)
+++ sandbox/SOC/2010/process/boost/process/detail/win32_helpers.hpp	2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
@@ -22,6 +22,7 @@
 #define BOOST_PROCESS_WIN32_HELPERS_HPP
 
 #include <boost/process/config.hpp>
+#include <boost/process/environment.hpp>
 #include <boost/shared_array.hpp>
 #include <string>
 #include <vector>
Modified: sandbox/SOC/2010/process/boost/process/operations.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/operations.hpp	(original)
+++ sandbox/SOC/2010/process/boost/process/operations.hpp	2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
@@ -33,7 +33,6 @@
 #   include <boost/process/detail/win32_helpers.hpp>
 #   include <boost/algorithm/string/predicate.hpp>
 #   include <windows.h>
-#   include <boost/process/status.hpp>
 #else
 #   error "Unsupported platform."
 #endif
@@ -179,13 +178,10 @@
     args.insert(args.begin(), p_name);
 
 #if defined(BOOST_POSIX_API)
-    child::id_type pid;
-    pid = ::fork();
-
+    pid_t pid = ::fork();
     if (pid == -1)
-        BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("fork(2) failed"); 
-
-    if (pid == 0) 
+        BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("fork(2) failed");
+    else if (pid == 0)
     {
 #if defined(F_MAXFD)
         int maxdescs = ::fcntl(-1, F_MAXFD, 0);
@@ -229,44 +225,43 @@
         {
             ::write(STDERR_FILENO, e.what(), std::strlen(e.what()));
             ::write(STDERR_FILENO, "\n", 1);
-            std::exit(EXIT_FAILURE);
+            std::exit(127);
         }
 
         std::pair<std::size_t, char**> argcv = detail::collection_to_posix_argv(args);
         char **envp = detail::environment_to_envp(ctx.environment);
+
         ::execve(executable.c_str(), argcv.second, envp);
 
         for (std::size_t i = 0; i < argcv.first; ++i) 
             delete[] argcv.second[i]; 
         delete[] argcv.second; 
 
-        for (std::size_t i = 0; i < sizeof(envp); ++i) 
+        for (std::size_t i = 0; i < ctx.environment.size(); ++i) 
             delete[] envp[i]; 
         delete[] envp; 
 
-        BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("execve() failed"); 
-        std::exit(EXIT_FAILURE); 
-
+        boost::system::system_error e(boost::system::error_code(errno, boost::system::get_system_category()), BOOST_PROCESS_SOURCE_LOCATION "execve(2) failed");
+        ::write(STDERR_FILENO, e.what(), std::strlen(e.what()));
+        ::write(STDERR_FILENO, "\n", 1);
+        std::exit(127);
     }
     else
     {
         BOOST_ASSERT(pid > 0);
 
-        //Is this really necessary?
-        if(ctx.stdin_behavior->get_child_end() != -1)
+        if (ctx.stdin_behavior->get_child_end() != -1)
             ::close(ctx.stdin_behavior->get_child_end());
-        if(ctx.stdout_behavior->get_child_end() != -1)
+        if (ctx.stdout_behavior->get_child_end() != -1)
             ::close(ctx.stdout_behavior->get_child_end());
-        if(ctx.stderr_behavior->get_child_end() != -1)
+        if (ctx.stderr_behavior->get_child_end() != -1)
             ::close(ctx.stderr_behavior->get_child_end());
 
         return child(pid,
-        detail::file_handle(ctx.stdin_behavior->get_parent_end()),
-        detail::file_handle(ctx.stdout_behavior->get_parent_end()),
-        detail::file_handle(ctx.stderr_behavior->get_parent_end()));
+            detail::file_handle(ctx.stdin_behavior->get_parent_end()),
+            detail::file_handle(ctx.stdout_behavior->get_parent_end()),
+            detail::file_handle(ctx.stderr_behavior->get_parent_end()));
     }
-
-
 #elif defined(BOOST_WINDOWS_API)
     STARTUPINFOA startup_info;
     ::ZeroMemory(&startup_info, sizeof(startup_info));
Modified: sandbox/SOC/2010/process/boost/process/status.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/status.hpp	(original)
+++ sandbox/SOC/2010/process/boost/process/status.hpp	2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
@@ -19,7 +19,6 @@
 #ifndef BOOST_PROCESS_STATUS_HPP
 #define BOOST_PROCESS_STATUS_HPP
 
-#if defined(BOOST_WINDOWS_API)
 #include <boost/process/config.hpp>
 #include <boost/process/detail/basic_status.hpp>
 #include <boost/process/detail/basic_status_service.hpp>
@@ -31,56 +30,3 @@
 
 }
 }
-#endif
-#if defined(BOOST_POSIX_API)
-
-//Old status implementation
-class status
-{
-    friend class process;
-
-public:
-    /**
-     * Returns whether the process exited gracefully or not.
-     */
-    bool exited() const
-    {
-        return WIFEXITED(flags_);
-    }
-
-    /**
-     * If exited, returns the exit code.
-     *
-     * If the process exited, returns the exit code it returned.
-     *
-     * \pre exited() is true.
-     */
-
-    int exit_code() const
-    {
-        BOOST_ASSERT(exited());
-
-        return WEXITSTATUS(flags_);
-    }
-
-protected:
-    /**
-     * Creates a status object based on exit information.
-     *
-     * Creates a new status object representing the exit status of a
-     * child process.
-     *
-     * \param flags In a POSIX system this parameter contains the
-     *        flags returned by the ::waitpid() call. In a
-     *        Windows system it contains the exit code only.
-     */
-    status(int flags)
-        : flags_(flags) {}
-
-    /**
-     * OS-specific codification of exit status.
-     */
-    int flags_;
-};
-#endif
-#endif
Modified: sandbox/SOC/2010/process/boost/process/stream_behavior.hpp
==============================================================================
--- sandbox/SOC/2010/process/boost/process/stream_behavior.hpp	(original)
+++ sandbox/SOC/2010/process/boost/process/stream_behavior.hpp	2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
@@ -115,9 +115,6 @@
         if (!::DuplicateHandle(::GetCurrentProcess(), child_end_, ::GetCurrentProcess(), &child_end_, 0, TRUE, DUPLICATE_SAME_ACCESS)) 
             BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("DuplicateHandle() failed"); 
 #endif 
-#if defined(BOOST_POSIX_API)
-        //Do nothing since is the default.
-#endif
     } 
 
     static boost::shared_ptr<inherit> def(native_type child_end) 
Modified: sandbox/SOC/2010/process/libs/process/example/create_process.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/example/create_process.cpp	(original)
+++ sandbox/SOC/2010/process/libs/process/example/create_process.cpp	2010-07-10 18:20:42 EDT (Sat, 10 Jul 2010)
@@ -11,7 +11,6 @@
 //
 
 #include <boost/process/all.hpp> 
-#include <boost/make_shared.hpp> 
 #include <boost/assign/list_of.hpp> 
 #include <vector> 
 #include <string>