$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r49387 - sandbox/SOC/2006/process/trunk/boost/process/detail
From: jmmv84_at_[hidden]
Date: 2008-10-19 09:54:29
Author: jmmv
Date: 2008-10-19 09:54:28 EDT (Sun, 19 Oct 2008)
New Revision: 49387
URL: http://svn.boost.org/trac/boost/changeset/49387
Log:
Avoid using strdup so that we can keep track of which specific memory
allocator was used and thus can free the memory appropriately.  We were
using delete [] before, but strdup probably does a simple malloc.
Caught by valgrind in Linux.
Text files modified: 
   sandbox/SOC/2006/process/trunk/boost/process/detail/posix_ops.hpp |    11 ++++++++---                             
   1 files changed, 8 insertions(+), 3 deletions(-)
Modified: sandbox/SOC/2006/process/trunk/boost/process/detail/posix_ops.hpp
==============================================================================
--- sandbox/SOC/2006/process/trunk/boost/process/detail/posix_ops.hpp	(original)
+++ sandbox/SOC/2006/process/trunk/boost/process/detail/posix_ops.hpp	2008-10-19 09:54:28 EDT (Sun, 19 Oct 2008)
@@ -1,7 +1,7 @@
 //
 // Boost.Process
 //
-// Copyright (c) 2006 Julio M. Merino Vidal.
+// Copyright (c) 2006, 2008 Julio M. Merino Vidal.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at
@@ -80,8 +80,13 @@
     typename Arguments::size_type i = 0;
     for (typename Arguments::const_iterator iter = args.begin();
          iter != args.end(); iter++) {
-        argv[i] = ::strdup((*iter).c_str());
-        i++;
+        const std::string& arg = *iter;
+
+        char* cstr = new char[arg.length() + 1];
+        std::strncpy(cstr, arg.c_str(), arg.length());
+        cstr[arg.length()] = '\0';
+
+        argv[i++] = cstr;
     }
     argv[nargs] = NULL;