summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorCaol?n McNamara <cmc@openoffice.org>2010-06-24 20:59:17 +0100
committerCaol?n McNamara <cmc@openoffice.org>2010-06-24 20:59:17 +0100
commit7add7926efaaeee7dd7913fd6df2b07a293c24f4 (patch)
tree25b24e3b1264a66860d375dabf73aea772cdaf18 /sal
parent5394e06d449e0c1326edd899553f9ab3d67b7078 (diff)
cmcfixes76: #i112656# osl_setEnvironment/osl_clearEnvironment
Diffstat (limited to 'sal')
-rw-r--r--sal/inc/osl/process.h15
-rw-r--r--sal/osl/os2/process_impl.cxx64
-rw-r--r--sal/osl/unx/process_impl.cxx97
-rw-r--r--sal/osl/w32/process.cxx16
-rwxr-xr-xsal/util/sal.map7
5 files changed, 198 insertions, 1 deletions
diff --git a/sal/inc/osl/process.h b/sal/inc/osl/process.h
index 73892bccebe0..0a0d3f6eaf7c 100644
--- a/sal/inc/osl/process.h
+++ b/sal/inc/osl/process.h
@@ -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.
diff --git a/sal/osl/os2/process_impl.cxx b/sal/osl/os2/process_impl.cxx
index 27b12bbe0f6a..307f311e3730 100644
--- a/sal/osl/os2/process_impl.cxx
+++ b/sal/osl/os2/process_impl.cxx
@@ -282,6 +282,70 @@ oslProcessError SAL_CALL osl_getEnvironment(rtl_uString* pustrEnvVar, rtl_uStrin
}
/***************************************
+ 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().
**************************************/
oslProcessError SAL_CALL osl_getProcessWorkingDir(rtl_uString **ppustrWorkingDir)
diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx
index e712b6748e7f..fb7eb3d9220d 100644
--- a/sal/osl/unx/process_impl.cxx
+++ b/sal/osl/unx/process_impl.cxx
@@ -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"
@@ -324,6 +325,100 @@ oslProcessError SAL_CALL osl_getEnvironment(rtl_uString* pustrEnvVar, rtl_uStrin
}
/***************************************
+ 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().
**************************************/
oslProcessError SAL_CALL osl_getProcessWorkingDir(rtl_uString **ppustrWorkingDir)
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx
index 96187be7e203..695c62db18bb 100644
--- a/sal/osl/w32/process.cxx
+++ b/sal/osl/w32/process.cxx
@@ -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.
***************************************************************************/
diff --git a/sal/util/sal.map b/sal/util/sal.map
index d5faa563ae3f..8b1c079ec899 100755
--- a/sal/util/sal.map
+++ b/sal/util/sal.map
@@ -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;