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::XContentEnumerationAccess;
|
||||||
using com::sun::star::container::XEnumeration;
|
using com::sun::star::container::XEnumeration;
|
||||||
|
|
||||||
#ifdef SAL_W32
|
|
||||||
#define putenv _putenv
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
OUString replacePrefix(OUString const & url, OUString const & prefix) {
|
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++;
|
i++;
|
||||||
if( i < ac )
|
if( i < ac )
|
||||||
{
|
{
|
||||||
// leak this string as some platforms assume to own
|
rtl::OUString envVar(RTL_CONSTASCII_USTRINGPARAM("CLASSPATH"));
|
||||||
// the pointer
|
rtl::OUString envValue(av[i], strlen(av[i]), osl_getThreadTextEncoding());
|
||||||
sal_Char * p = (sal_Char *) rtl_allocateMemory( 13+ strlen( av[i] ) );
|
osl_setEnvironment(envVar.pData, envValue.pData);
|
||||||
p[0] = 0;
|
|
||||||
strcat( p, "CLASSPATH=" ); // #100211# - checked
|
|
||||||
strcat( p, av[i] ); // #100211# - checked
|
|
||||||
|
|
||||||
putenv( p );
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -123,8 +123,7 @@ static void setPythonHome ( const OUString & pythonHome )
|
|||||||
|
|
||||||
static void prependPythonPath( const OUString & pythonPathBootstrap )
|
static void prependPythonPath( const OUString & pythonPathBootstrap )
|
||||||
{
|
{
|
||||||
rtl::OStringBuffer bufPYTHONPATH( 256 );
|
rtl::OUStringBuffer bufPYTHONPATH( 256 );
|
||||||
bufPYTHONPATH.append( "PYTHONPATH=");
|
|
||||||
sal_Int32 nIndex = 0;
|
sal_Int32 nIndex = 0;
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
@@ -140,7 +139,7 @@ static void prependPythonPath( const OUString & pythonPathBootstrap )
|
|||||||
}
|
}
|
||||||
OUString systemPath;
|
OUString systemPath;
|
||||||
osl_getSystemPathFromFileURL( fileUrl.pData, &(systemPath.pData) );
|
osl_getSystemPathFromFileURL( fileUrl.pData, &(systemPath.pData) );
|
||||||
bufPYTHONPATH.append( rtl::OUStringToOString( systemPath.pData, osl_getThreadTextEncoding() ));
|
bufPYTHONPATH.append( systemPath );
|
||||||
bufPYTHONPATH.append( SAL_PATHSEPARATOR );
|
bufPYTHONPATH.append( SAL_PATHSEPARATOR );
|
||||||
if( nNew == -1 )
|
if( nNew == -1 )
|
||||||
break;
|
break;
|
||||||
@@ -148,13 +147,11 @@ static void prependPythonPath( const OUString & pythonPathBootstrap )
|
|||||||
}
|
}
|
||||||
const char * oldEnv = getenv( "PYTHONPATH");
|
const char * oldEnv = getenv( "PYTHONPATH");
|
||||||
if( oldEnv )
|
if( oldEnv )
|
||||||
bufPYTHONPATH.append( oldEnv );
|
bufPYTHONPATH.append( rtl::OUString(oldEnv, strlen(oldEnv), osl_getThreadTextEncoding()) );
|
||||||
OString result = bufPYTHONPATH.makeStringAndClear();
|
|
||||||
rtl_string_acquire( result.pData );
|
|
||||||
|
|
||||||
// printf( "Setting %s\n" , result.pData->buffer );
|
|
||||||
putenv( result.pData->buffer );
|
|
||||||
|
|
||||||
|
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 )
|
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);
|
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.
|
/** Get the working directory of the current process as a file URL.
|
||||||
|
|
||||||
The file URL is encoded as common for the OSL file API.
|
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);
|
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().
|
osl_getProcessWorkingDir().
|
||||||
**************************************/
|
**************************************/
|
||||||
|
@@ -50,10 +50,11 @@
|
|||||||
#define INCLUDED_STRING_H
|
#define INCLUDED_STRING_H
|
||||||
#endif
|
#endif
|
||||||
#include "osl/diagnose.h"
|
#include "osl/diagnose.h"
|
||||||
#include <osl/file.h>
|
#include "osl/file.h"
|
||||||
#include "osl/module.h"
|
#include "osl/module.h"
|
||||||
#include "osl/thread.h"
|
#include "osl/thread.h"
|
||||||
#include "rtl/ustring.hxx"
|
#include "rtl/ustring.hxx"
|
||||||
|
#include "rtl/strbuf.h"
|
||||||
|
|
||||||
#ifndef _OSL_FILE_PATH_HELPER_H_
|
#ifndef _OSL_FILE_PATH_HELPER_H_
|
||||||
#include "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);
|
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().
|
osl_getProcessWorkingDir().
|
||||||
**************************************/
|
**************************************/
|
||||||
|
@@ -413,6 +413,22 @@ oslProcessError SAL_CALL osl_getEnvironment(rtl_uString *ustrVar, rtl_uString **
|
|||||||
return osl_Process_E_Unknown;
|
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.
|
* Current Working Directory.
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
@@ -597,6 +597,13 @@ UDK_3.10 { # OOo 3.2
|
|||||||
rtl_math_acosh;
|
rtl_math_acosh;
|
||||||
} UDK_3.9;
|
} UDK_3.9;
|
||||||
|
|
||||||
|
|
||||||
|
UDK_3.11 { # OOo 3.4
|
||||||
|
global:
|
||||||
|
osl_setEnvironment;
|
||||||
|
osl_clearEnvironment;
|
||||||
|
} UDK_3.10;
|
||||||
|
|
||||||
PRIVATE_1.0 {
|
PRIVATE_1.0 {
|
||||||
global:
|
global:
|
||||||
osl_detail_ObjectRegistry_storeAddresses;
|
osl_detail_ObjectRegistry_storeAddresses;
|
||||||
|
Reference in New Issue
Block a user