You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2007/10/11 18:56:03 UTC

svn commit: r583878 - in /activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang: System.cpp System.h

Author: tabish
Date: Thu Oct 11 09:56:02 2007
New Revision: 583878

URL: http://svn.apache.org/viewvc?rev=583878&view=rev
Log:
http://issues.apache.org/activemq/browse/AMQCPP-103

Fixing getenv to not reference environ, make plat get funcs return vector<string>

Modified:
    activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp
    activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h

Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp?rev=583878&r1=583877&r2=583878&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.cpp Thu Oct 11 09:56:02 2007
@@ -39,10 +39,6 @@
 using namespace decaf::internal;
 using namespace decaf::lang::exceptions;
 
-#if !defined(_WIN32)
-    extern char** environ;
-#endif 
-
 ////////////////////////////////////////////////////////////////////////////////
 AprPool System::aprPool;
 
@@ -134,16 +130,10 @@
     string key = "";
     string value = "";
     int tokens = 0;
-    char** env = getEnvArray();
-    if( env == NULL ) {
-        throw RuntimeException(
-            __FILE__, __LINE__,
-            "System::getenv - Failed to enumerate the environment." );
-    }
+    std::vector<std::string> env = getEnvArray();
 
-    for( int i = 0; *(env + i); i++ ){
+    for( std::size_t i = 0; i < env.size(); i++ ){
         tokenizer.reset( env[i], "=" );
-        delete env[i];  // Clean them as we go
 
         tokens = tokenizer.countTokens();
 
@@ -154,16 +144,15 @@
         } else if( tokens > 2 ) {
             // special case: first equals delimits the key value, the rest are
             // part of the variable
-            std::string envVal( environ[i] );
-            int pos = envVal.find( "=" );
-            key = envVal.substr( 0, pos );
-            value = envVal.substr( pos + 1, string::npos );
+            int pos = env[i].find( "=" );
+            key = env[i].substr( 0, pos );
+            value = env[i].substr( pos + 1, string::npos );
         } else if( tokens == 0 ) {
             // Odd case, got a string with no equals sign.
             throw IllegalArgumentException(
                 __FILE__, __LINE__,
                 "System::getenv - Invalid env string. %s",
-                environ[i] );
+                env[i].c_str() );
         } else {
             // Normal case.
             key = tokenizer.nextToken();
@@ -174,9 +163,6 @@
         values.setValue( key, value );
     }
 
-    // cleanup
-    delete [] env;
-
     return values;
 }
 
@@ -185,9 +171,9 @@
 #include <windows.h>
 
 ////////////////////////////////////////////////////////////////////////////////
-char** System::getEnvArray() {
+std::vector<std::string> System::getEnvArray() {
 
-    char** buffer = NULL;
+    std::vector<std::string> buffer;
     int count = 0;
     LPTSTR lpszVars;
     LPVOID lpvEnv;
@@ -203,14 +189,10 @@
         lpszVars += strlen(lpszVars)+1;
     }
 
-    // allocate buffer first dimension
-    buffer = new char*[count+1];
-    buffer[count] = NULL;
-
     lpszVars = (LPTSTR)lpvEnv;
     int index = 0;
     while( *lpszVars != NULL ) {
-        buffer[++index] = strdup( lpszVars );
+        buffer.push_back( lpszVars );
         lpszVars += strlen(lpszVars)+1;
     }
 
@@ -220,23 +202,21 @@
 
 #else
 
+////////////////////////////////////////////////////////////////////////////////
+extern char** environ;
 
 ////////////////////////////////////////////////////////////////////////////////
-char** System::getEnvArray() {
+std::vector<std::string> System::getEnvArray() {
 
-    char** buffer = NULL;
+    std::vector<std::string> buffer;
     int count = 0;
 
     for( int i = 0; *(environ + i); i++ ){
         count++;
     }
 
-    // allocate buffer first dimension
-    buffer = new char*[count+1];
-    buffer[count] = NULL;
-
     for( int i = 0; *(environ + i); i++ ){
-        buffer[i] = strdup( environ[i] );
+        buffer.push_back( environ[i] );
     }
 
     return buffer;

Modified: activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h?rev=583878&r1=583877&r2=583878&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h (original)
+++ activemq/activemq-cpp/trunk/src/decaf/src/main/decaf/lang/System.h Thu Oct 11 09:56:02 2007
@@ -86,9 +86,9 @@
          * Enumerates the environment and return an array of strings
          * with the values.  Caller owns the array.  The array is terminated
          * by an element that holds the value NULL
-         * @returns caller owned array of env name=value paris.
+         * @returns a vector of env name=value paris.
          */
-        static char** getEnvArray();
+        static std::vector< std::string > getEnvArray();
 
     };