$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r64747 - in sandbox/SOC/2010/process: boost/process libs/process/test libs/process/test/util
From: boris_at_[hidden]
Date: 2010-08-11 19:01:42
Author: bschaeling
Date: 2010-08-11 19:01:41 EDT (Wed, 11 Aug 2010)
New Revision: 64747
URL: http://svn.boost.org/trac/boost/changeset/64747
Log:
Fixed test case for asynchronous read/write operations
Text files modified: 
   sandbox/SOC/2010/process/boost/process/stream_behavior.hpp  |     6 ++++++                                  
   sandbox/SOC/2010/process/libs/process/test/child.cpp        |    12 ++++++------                            
   sandbox/SOC/2010/process/libs/process/test/util/helpers.cpp |     9 +++++++++                               
   3 files changed, 21 insertions(+), 6 deletions(-)
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-08-11 19:01:41 EDT (Wed, 11 Aug 2010)
@@ -213,6 +213,12 @@
         child_end_ = open(s.c_str(), O_RDONLY | O_NONBLOCK);
         if (!child_end_.valid())
             BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("open(2) failed");
+        int opts = fcntl(child_end_.native(), F_GETFL);
+        if (opts == -1)
+            BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("fcntl(2) failed");
+        opts ^= O_NONBLOCK;
+        if (fcntl(child_end_.native(), F_SETFL, opts) == -1)
+            BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("fcntl(2) failed");
         parent_end_ = open(s.c_str(), O_WRONLY);
         if (!parent_end_.valid())
             BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("open(2) failed");
Modified: sandbox/SOC/2010/process/libs/process/test/child.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/test/child.cpp	(original)
+++ sandbox/SOC/2010/process/libs/process/test/child.cpp	2010-08-11 19:01:41 EDT (Wed, 11 Aug 2010)
@@ -442,7 +442,7 @@
     std::size_t bytes_transferred) 
 { 
     BOOST_REQUIRE_EQUAL(ec, boost::system::error_code()); 
-    BOOST_CHECK_EQUAL(bytes_transferred, 4u); 
+    BOOST_CHECK_EQUAL(bytes_transferred, 5u); 
 } 
 
 void read_handler(const boost::system::error_code &ec, 
@@ -453,17 +453,17 @@
     std::string line; 
     std::getline(is, line); 
 #if defined(BOOST_POSIX_API) 
-    BOOST_CHECK_EQUAL(line, "test"); 
+    BOOST_CHECK_EQUAL(line, "async-test"); 
 #elif defined(BOOST_WINDOWS_API) 
-    BOOST_CHECK_EQUAL(line, "test\r"); 
+    BOOST_CHECK_EQUAL(line, "async-test\r"); 
 #endif 
 } 
 
 BOOST_AUTO_TEST_CASE(test_async) 
 { 
     std::vector<std::string> args; 
-    args.push_back("echo-stdout"); 
-    args.push_back("test"); 
+    args.push_back("prefix-once"); 
+    args.push_back("async-"); 
 
     bp::context ctx; 
     ctx.stdin_behavior = bp::behavior::named_pipe::create( 
@@ -479,7 +479,7 @@
     bp::pipe write_end(ioservice, os.handle().release()); 
     bp::pipe read_end(ioservice, is.handle().release()); 
 
-    ba::async_write(write_end, ba::buffer("test", 4), write_handler); 
+    ba::async_write(write_end, ba::buffer("test\n", 5), write_handler); 
     ba::streambuf buf; 
     ba::async_read_until(read_end, buf, '\n', boost::bind(read_handler, 
         ba::placeholders::error, ba::placeholders::bytes_transferred, 
Modified: sandbox/SOC/2010/process/libs/process/test/util/helpers.cpp
==============================================================================
--- sandbox/SOC/2010/process/libs/process/test/util/helpers.cpp	(original)
+++ sandbox/SOC/2010/process/libs/process/test/util/helpers.cpp	2010-08-11 19:01:41 EDT (Wed, 11 Aug 2010)
@@ -135,6 +135,14 @@
     return EXIT_SUCCESS; 
 } 
 
+int h_prefix_once(int argc, char *argv[]) 
+{ 
+    std::string line; 
+    std::getline(std::cin, line); 
+    std::cout << argv[1] << line << std::endl; 
+    return EXIT_SUCCESS; 
+} 
+
 int h_pwd(int argc, char *argv[]) 
 { 
     std::cout << bfs::current_path().string() << std::endl; 
@@ -243,6 +251,7 @@
     { "is-nul-stderr", h_is_nul_stderr, 1, "" }, 
     { "loop", h_loop, 1, "" }, 
     { "prefix", h_prefix, 2, "string" }, 
+    { "prefix-once", h_prefix_once, 2, "string" }, 
     { "pwd", h_pwd, 1, "" }, 
     { "query-env", h_query_env, 2, "variable" }, 
     { "stdin-to-stdout", h_stdin_to_stdout, 1, "" },