]> git.lyx.org Git - features.git/commitdiff
fix memory leak
authorPeter Kümmel <syntheticpp@gmx.net>
Sat, 1 Dec 2007 10:52:52 +0000 (10:52 +0000)
committerPeter Kümmel <syntheticpp@gmx.net>
Sat, 1 Dec 2007 10:52:52 +0000 (10:52 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21898 a592a061-630c-0410-9148-cb99ea01b6c8

src/support/environment.cpp

index 552f1b0f1f99ddf5d7d6056ceeb1ba8169851419..5bce59916d1a4b43101768eed3ce04a03f83d19c 100644 (file)
@@ -18,6 +18,7 @@
 #include "support/os.h"
 
 #include <boost/tokenizer.hpp>
+#include <boost/shared_array.hpp>
 
 #include <cstdlib>
 #include <map>
@@ -65,22 +66,17 @@ bool setEnv(string const & name, string const & value)
        string const encoded = to_local8bit(from_utf8(value));
 #if defined (HAVE_SETENV)
        return ::setenv(name.c_str(), encoded.c_str(), true);
-
 #elif defined (HAVE_PUTENV)
-       static std::map<string, char *> varmap;
+       static std::map<string, boost::shared_array<char> > varmap;
 
        string envstr = name + '=' + encoded;
-       char * newptr = new char[envstr.size() + 1];
-       envstr.copy(newptr, envstr.length());
-       newptr[envstr.length()] = '\0';
-       int const retval = ::putenv(newptr);
-
-       char * oldptr = varmap[name];
-       if (oldptr)
-               delete oldptr;
-       varmap[name] = newptr;
-       return retval == 0;
+       boost::shared_array<char> newptr(new char[envstr.size() + 1]);
+       envstr.copy(newptr.get(), envstr.length());
+       newptr.get()[envstr.length()] = '\0';
+       bool const retval = ::putenv(newptr.get()) == 0;
 
+       varmap[name] = newptr;
+       return retval;
 #else
 #error No environment-setting function has been defined.
 #endif