cmcfixes76: #i112656# osl_setEnvironment/osl_clearEnvironment
This commit is contained in:
@@ -66,10 +66,6 @@ using com::sun::star::container::XSet;
|
||||
using com::sun::star::container::XContentEnumerationAccess;
|
||||
using com::sun::star::container::XEnumeration;
|
||||
|
||||
#ifdef SAL_W32
|
||||
#define putenv _putenv
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
|
||||
OUString replacePrefix(OUString const & url, OUString const & prefix) {
|
||||
@@ -313,14 +309,9 @@ sal_Bool parseOptions(int ac, char* av[], Options& rOptions, sal_Bool bCmdFile)
|
||||
i++;
|
||||
if( i < ac )
|
||||
{
|
||||
// leak this string as some platforms assume to own
|
||||
// the pointer
|
||||
sal_Char * p = (sal_Char *) rtl_allocateMemory( 13+ strlen( av[i] ) );
|
||||
p[0] = 0;
|
||||
strcat( p, "CLASSPATH=" ); // #100211# - checked
|
||||
strcat( p, av[i] ); // #100211# - checked
|
||||
|
||||
putenv( p );
|
||||
rtl::OUString envVar(RTL_CONSTASCII_USTRINGPARAM("CLASSPATH"));
|
||||
rtl::OUString envValue(av[i], strlen(av[i]), osl_getThreadTextEncoding());
|
||||
osl_setEnvironment(envVar.pData, envValue.pData);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@@ -123,8 +123,7 @@ static void setPythonHome ( const OUString & pythonHome )
|
||||
|
||||
static void prependPythonPath( const OUString & pythonPathBootstrap )
|
||||
{
|
||||
rtl::OStringBuffer bufPYTHONPATH( 256 );
|
||||
bufPYTHONPATH.append( "PYTHONPATH=");
|
||||
rtl::OUStringBuffer bufPYTHONPATH( 256 );
|
||||
sal_Int32 nIndex = 0;
|
||||
while( 1 )
|
||||
{
|
||||
@@ -140,7 +139,7 @@ static void prependPythonPath( const OUString & pythonPathBootstrap )
|
||||
}
|
||||
OUString systemPath;
|
||||
osl_getSystemPathFromFileURL( fileUrl.pData, &(systemPath.pData) );
|
||||
bufPYTHONPATH.append( rtl::OUStringToOString( systemPath.pData, osl_getThreadTextEncoding() ));
|
||||
bufPYTHONPATH.append( systemPath );
|
||||
bufPYTHONPATH.append( SAL_PATHSEPARATOR );
|
||||
if( nNew == -1 )
|
||||
break;
|
||||
@@ -148,13 +147,11 @@ static void prependPythonPath( const OUString & pythonPathBootstrap )
|
||||
}
|
||||
const char * oldEnv = getenv( "PYTHONPATH");
|
||||
if( oldEnv )
|
||||
bufPYTHONPATH.append( oldEnv );
|
||||
OString result = bufPYTHONPATH.makeStringAndClear();
|
||||
rtl_string_acquire( result.pData );
|
||||
|
||||
// printf( "Setting %s\n" , result.pData->buffer );
|
||||
putenv( result.pData->buffer );
|
||||
bufPYTHONPATH.append( rtl::OUString(oldEnv, strlen(oldEnv), osl_getThreadTextEncoding()) );
|
||||
|
||||
rtl::OUString envVar(RTL_CONSTASCII_USTRINGPARAM("PYTHONPATH"));
|
||||
rtl::OUString envValue(bufPYTHONPATH.makeStringAndClear());
|
||||
osl_setEnvironment(envVar.pData, envValue.pData);
|
||||
}
|
||||
|
||||
Reference< XInterface > CreateInstance( const Reference< XComponentContext > & ctx )
|
||||
|
@@ -388,6 +388,21 @@ void SAL_CALL osl_setCommandArgs (int argc, char **argv);
|
||||
*/
|
||||
oslProcessError SAL_CALL osl_getEnvironment(rtl_uString *strVar, rtl_uString **strValue);
|
||||
|
||||
/** Set the value of one enviroment variable.
|
||||
@param strVar [in] denotes the name of the variable to set.
|
||||
@param strValue [in] string of the new value of environment variable.
|
||||
|
||||
@since UDK 3.2.13
|
||||
*/
|
||||
oslProcessError SAL_CALL osl_setEnvironment(rtl_uString *strVar, rtl_uString *strValue);
|
||||
|
||||
/** Unsets the value of one enviroment variable.
|
||||
@param strVar [in] denotes the name of the variable to unset.
|
||||
|
||||
@since UDK 3.2.13
|
||||
*/
|
||||
oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString *strVar);
|
||||
|
||||
/** Get the working directory of the current process as a file URL.
|
||||
|
||||
The file URL is encoded as common for the OSL file API.
|
||||
|
@@ -281,6 +281,70 @@ oslProcessError SAL_CALL osl_getEnvironment(rtl_uString* pustrEnvVar, rtl_uStrin
|
||||
return (result);
|
||||
}
|
||||
|
||||
/***************************************
|
||||
osl_setEnvironment().
|
||||
**************************************/
|
||||
oslProcessError SAL_CALL osl_setEnvironment(rtl_uString* pustrEnvVar, rtl_uString* pustrValue)
|
||||
{
|
||||
oslProcessError result = osl_Process_E_Unknown;
|
||||
rtl_TextEncoding encoding = osl_getThreadTextEncoding();
|
||||
rtl_String* pstr_env_var = 0;
|
||||
rtl_String* pstr_val = 0;
|
||||
|
||||
OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter");
|
||||
OSL_PRECOND(pustrValue, "osl_setEnvironment(): Invalid parameter");
|
||||
|
||||
rtl_uString2String(
|
||||
&pstr_env_var,
|
||||
rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
|
||||
OUSTRING_TO_OSTRING_CVTFLAGS);
|
||||
|
||||
rtl_uString2String(
|
||||
&pstr_val,
|
||||
rtl_uString_getStr(pustrValue), rtl_uString_getLength(pustrValue), encoding,
|
||||
OUSTRING_TO_OSTRING_CVTFLAGS);
|
||||
|
||||
if (pstr_env_var != 0 && pstr_val != 0)
|
||||
{
|
||||
if (setenv(rtl_string_getStr(pstr_env_var), rtl_string_getStr(pstr_val), 1) == 0)
|
||||
result = osl_Process_E_None;
|
||||
}
|
||||
|
||||
if (pstr_val != 0)
|
||||
rtl_string_release(pstr_val);
|
||||
|
||||
if (pstr_env_var != 0)
|
||||
rtl_string_release(pstr_env_var);
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
/***************************************
|
||||
osl_clearEnvironment().
|
||||
**************************************/
|
||||
oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString* pustrEnvVar)
|
||||
{
|
||||
oslProcessError result = osl_Process_E_Unknown;
|
||||
rtl_TextEncoding encoding = osl_getThreadTextEncoding();
|
||||
rtl_String* pstr_env_var = 0;
|
||||
|
||||
OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter");
|
||||
|
||||
rtl_uString2String(
|
||||
&pstr_env_var,
|
||||
rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
|
||||
OUSTRING_TO_OSTRING_CVTFLAGS);
|
||||
|
||||
if (pstr_env_var)
|
||||
{
|
||||
if (unsetenv(rtl_string_getStr(pstr_env_var)) == 0)
|
||||
result = osl_Process_E_None;
|
||||
rtl_string_release(pstr_env_var);
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
/***************************************
|
||||
osl_getProcessWorkingDir().
|
||||
**************************************/
|
||||
|
@@ -50,10 +50,11 @@
|
||||
#define INCLUDED_STRING_H
|
||||
#endif
|
||||
#include "osl/diagnose.h"
|
||||
#include <osl/file.h>
|
||||
#include "osl/file.h"
|
||||
#include "osl/module.h"
|
||||
#include "osl/thread.h"
|
||||
#include "rtl/ustring.hxx"
|
||||
#include "rtl/strbuf.h"
|
||||
|
||||
#ifndef _OSL_FILE_PATH_HELPER_H_
|
||||
#include "file_path_helper.h"
|
||||
@@ -323,6 +324,100 @@ oslProcessError SAL_CALL osl_getEnvironment(rtl_uString* pustrEnvVar, rtl_uStrin
|
||||
return (result);
|
||||
}
|
||||
|
||||
/***************************************
|
||||
osl_setEnvironment().
|
||||
**************************************/
|
||||
oslProcessError SAL_CALL osl_setEnvironment(rtl_uString* pustrEnvVar, rtl_uString* pustrValue)
|
||||
{
|
||||
oslProcessError result = osl_Process_E_Unknown;
|
||||
rtl_TextEncoding encoding = osl_getThreadTextEncoding();
|
||||
rtl_String* pstr_env_var = 0;
|
||||
rtl_String* pstr_val = 0;
|
||||
|
||||
OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter");
|
||||
OSL_PRECOND(pustrValue, "osl_setEnvironment(): Invalid parameter");
|
||||
|
||||
rtl_uString2String(
|
||||
&pstr_env_var,
|
||||
rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
|
||||
OUSTRING_TO_OSTRING_CVTFLAGS);
|
||||
|
||||
rtl_uString2String(
|
||||
&pstr_val,
|
||||
rtl_uString_getStr(pustrValue), rtl_uString_getLength(pustrValue), encoding,
|
||||
OUSTRING_TO_OSTRING_CVTFLAGS);
|
||||
|
||||
if (pstr_env_var != 0 && pstr_val != 0)
|
||||
{
|
||||
#if defined (SOLARIS)
|
||||
rtl_String * pBuffer;
|
||||
|
||||
sal_Int32 nCapacity = rtl_stringbuffer_newFromStringBuffer( &pBuffer,
|
||||
rtl_string_getLength(pstr_env_var) + rtl_string_getLength(pstr_val) + 1,
|
||||
pstr_env_var );
|
||||
rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, "=", 1);
|
||||
rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length,
|
||||
rtl_string_getStr(pstr_val), rtl_string_getLength(pstr_val) );
|
||||
|
||||
rtl_string_acquire(pBuffer); // argument to putenv must leak
|
||||
|
||||
if (putenv(rtl_string_getStr(pBuffer)) == 0)
|
||||
result = osl_Process_E_None;
|
||||
#else
|
||||
if (setenv(rtl_string_getStr(pstr_env_var), rtl_string_getStr(pstr_val), 1) == 0)
|
||||
result = osl_Process_E_None;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (pstr_val)
|
||||
rtl_string_release(pstr_val);
|
||||
|
||||
if (pstr_env_var != 0)
|
||||
rtl_string_release(pstr_env_var);
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
/***************************************
|
||||
osl_clearEnvironment().
|
||||
**************************************/
|
||||
oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString* pustrEnvVar)
|
||||
{
|
||||
oslProcessError result = osl_Process_E_Unknown;
|
||||
rtl_TextEncoding encoding = osl_getThreadTextEncoding();
|
||||
rtl_String* pstr_env_var = 0;
|
||||
|
||||
OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter");
|
||||
|
||||
rtl_uString2String(
|
||||
&pstr_env_var,
|
||||
rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding,
|
||||
OUSTRING_TO_OSTRING_CVTFLAGS);
|
||||
|
||||
if (pstr_env_var)
|
||||
{
|
||||
#if defined (SOLARIS)
|
||||
rtl_String * pBuffer;
|
||||
|
||||
sal_Int32 nCapacity = rtl_stringbuffer_newFromStringBuffer( &pBuffer,
|
||||
rtl_string_getLength(pstr_env_var) + 1, pstr_env_var );
|
||||
rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, "=", 1);
|
||||
|
||||
rtl_string_acquire(pBuffer); // argument to putenv must leak
|
||||
|
||||
if (putenv(rtl_string_getStr(pBuffer)) == 0)
|
||||
result = osl_Process_E_None;
|
||||
#else
|
||||
if (unsetenv(rtl_string_getStr(pstr_env_var)) == 0)
|
||||
result = osl_Process_E_None;
|
||||
#endif
|
||||
rtl_string_release(pstr_env_var);
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
||||
/***************************************
|
||||
osl_getProcessWorkingDir().
|
||||
**************************************/
|
||||
|
@@ -413,6 +413,22 @@ oslProcessError SAL_CALL osl_getEnvironment(rtl_uString *ustrVar, rtl_uString **
|
||||
return osl_Process_E_Unknown;
|
||||
}
|
||||
|
||||
oslProcessError SAL_CALL osl_setEnvironment(rtl_uString *ustrVar, rtl_uString *ustrValue)
|
||||
{
|
||||
if (SetEnvironmentVariableW(ustrVar->buffer, ustrValue->buffer))
|
||||
return osl_Process_E_None;
|
||||
return osl_Process_E_Unknown;
|
||||
}
|
||||
|
||||
oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString *ustrVar)
|
||||
{
|
||||
//If the second parameter is NULL, the variable is deleted from the current
|
||||
//process's environment.
|
||||
if (SetEnvironmentVariableW(ustrVar->buffer, NULL))
|
||||
return osl_Process_E_None;
|
||||
return osl_Process_E_Unknown;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
* Current Working Directory.
|
||||
***************************************************************************/
|
||||
|
@@ -597,6 +597,13 @@ UDK_3.10 { # OOo 3.2
|
||||
rtl_math_acosh;
|
||||
} UDK_3.9;
|
||||
|
||||
|
||||
UDK_3.11 { # OOo 3.4
|
||||
global:
|
||||
osl_setEnvironment;
|
||||
osl_clearEnvironment;
|
||||
} UDK_3.10;
|
||||
|
||||
PRIVATE_1.0 {
|
||||
global:
|
||||
osl_detail_ObjectRegistry_storeAddresses;
|
||||
|
Reference in New Issue
Block a user