summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorsb <sb@openoffice.org>2010-09-16 16:45:57 +0200
committersb <sb@openoffice.org>2010-09-16 16:45:57 +0200
commitd8d1b35406e3c3fa820f976914257676f81bc848 (patch)
tree3b4944aa807eba42d1b99e725c77b8c247fd8180 /sal
parentce8677050293f93d38e21e3632af01c5de022491 (diff)
parent3813e349c8c3a7ac14af729085614fccb59fa5a5 (diff)
sb126: merged in DEV300_m87
Diffstat (limited to 'sal')
-rw-r--r--sal/cppunittester/cppunittester.cxx2
-rw-r--r--sal/cppunittester/makefile.mk7
-rw-r--r--sal/inc/osl/process.h15
-rw-r--r--sal/osl/os2/process_impl.cxx92
-rw-r--r--sal/osl/os2/system.h3
-rw-r--r--sal/osl/unx/process_impl.cxx107
-rw-r--r--sal/osl/w32/process.cxx19
-rw-r--r--sal/osl/w32/salinit.cxx20
-rw-r--r--sal/rtl/source/makefile.mk2
-rwxr-xr-xsal/util/sal.map7
10 files changed, 270 insertions, 4 deletions
diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx
index 1082e6ff9844..ac99601f5ce5 100644
--- a/sal/cppunittester/cppunittester.cxx
+++ b/sal/cppunittester/cppunittester.cxx
@@ -31,6 +31,7 @@
#include <cstdlib>
#include <iostream>
+#include "preextstl.h"
#include "cppunit/CompilerOutputter.h"
#include "cppunit/TestResult.h"
#include "cppunit/TestResultCollector.h"
@@ -38,6 +39,7 @@
#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/plugin/PlugInManager.h"
#include "cppunit/portability/Stream.h"
+#include "postextstl.h"
#include "osl/thread.h"
#include "rtl/process.h"
#include "rtl/string.hxx"
diff --git a/sal/cppunittester/makefile.mk b/sal/cppunittester/makefile.mk
index 938b63d90ae9..61fe7868c9f3 100644
--- a/sal/cppunittester/makefile.mk
+++ b/sal/cppunittester/makefile.mk
@@ -33,6 +33,13 @@ ENABLE_EXCEPTIONS = TRUE
.INCLUDE: settings.mk
+#building with stlport, but cppunit was not built with stlport
+.IF "$(USE_SYSTEM_STL)"!="YES"
+.IF "$(SYSTEM_CPPUNIT)"=="YES"
+CFLAGSCXX+=-DADAPT_EXT_STL
+.ENDIF
+.ENDIF
+
CFLAGSCXX += $(CPPUNIT_CFLAGS)
OBJFILES = $(APP1OBJS)
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..be6bb1898e65 100644
--- a/sal/osl/os2/process_impl.cxx
+++ b/sal/osl/os2/process_impl.cxx
@@ -282,6 +282,98 @@ 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)
+ {
+ //Can't determine if OS/2 EMX has a working setenv or not, so use putenv,
+ //feel free to use setenv here if its available and works
+ rtl_String * pBuffer = NULL;
+
+ 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 on success
+
+ if (putenv(rtl_string_getStr(pBuffer)) == 0)
+ result = osl_Process_E_None;
+ else
+ rtl_string_release(pBuffer);
+ }
+
+ 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)
+ {
+ //Can't determine if OS/2 EMX has a working unsetenv or not, so use putenv,
+ //feel free to use unsetenv here if its available and works
+ rtl_String * pBuffer = NULL;
+
+ 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 on success
+
+ if (putenv(rtl_string_getStr(pBuffer)) == 0)
+ result = osl_Process_E_None;
+ else
+ rtl_string_release(pBuffer);
+
+ rtl_string_release(pstr_env_var);
+ }
+
+ return (result);
+}
+
+/***************************************
osl_getProcessWorkingDir().
**************************************/
oslProcessError SAL_CALL osl_getProcessWorkingDir(rtl_uString **ppustrWorkingDir)
diff --git a/sal/osl/os2/system.h b/sal/osl/os2/system.h
index ac7e410c5a34..436ae0074a04 100644
--- a/sal/osl/os2/system.h
+++ b/sal/osl/os2/system.h
@@ -356,8 +356,7 @@ char *macxp_tempnam( const char *tmpdir, const char *prefix );
#if !defined(_WIN32) && !defined(_WIN16) && !defined(OS2) && \
!defined(LINUX) && !defined(NETBSD) && !defined(FREEBSD) && !defined(SCO) && \
!defined(AIX) && !defined(HPUX) && \
- !defined(SOLARIS) && !defined(MAC) && \
- !defined(MACOSX)
+ !defined(SOLARIS) && !defined(MACOSX)
# error "Target plattform not specified !"
#endif
diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx
index e712b6748e7f..66c0d0f5c701 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,110 @@ 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 = NULL;
+
+ 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 on success
+
+ if (putenv(rtl_string_getStr(pBuffer)) == 0)
+ result = osl_Process_E_None;
+ else
+ rtl_string_release(pBuffer);
+#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 = NULL;
+
+ 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 on success
+
+ if (putenv(rtl_string_getStr(pBuffer)) == 0)
+ result = osl_Process_E_None;
+ else
+ rtl_string_release(pBuffer);
+#elif (defined(MACOSX) || defined(NETBSD) || defined(FREEBSD))
+ //MacOSX baseline is 10.4, which has an old-school void return
+ //for unsetenv.
+ //See: http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/10.4/man3/unsetenv.3.html?useVersion=10.4
+ unsetenv(rtl_string_getStr(pstr_env_var));
+ 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..521ac6f76ad4 100644
--- a/sal/osl/w32/process.cxx
+++ b/sal/osl/w32/process.cxx
@@ -413,6 +413,25 @@ 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)
+{
+ LPCWSTR lpName = reinterpret_cast<LPCWSTR>(ustrVar->buffer);
+ LPCWSTR lpValue = reinterpret_cast<LPCWSTR>(ustrValue->buffer);
+ if (SetEnvironmentVariableW(lpName, lpValue))
+ 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.
+ LPCWSTR lpName = reinterpret_cast<LPCWSTR>(ustrVar->buffer);
+ if (SetEnvironmentVariableW(lpName, NULL))
+ return osl_Process_E_None;
+ return osl_Process_E_Unknown;
+}
+
/***************************************************************************
* Current Working Directory.
***************************************************************************/
diff --git a/sal/osl/w32/salinit.cxx b/sal/osl/w32/salinit.cxx
index aea584f67970..ab124620a07c 100644
--- a/sal/osl/w32/salinit.cxx
+++ b/sal/osl/w32/salinit.cxx
@@ -40,6 +40,26 @@ extern "C" {
void SAL_CALL sal_detail_initialize(int argc, char ** argv)
{
+ // SetProcessDEPPolicy(PROCESS_DEP_ENABLE);
+ // SetDllDirectoryW(L"");
+ // SetSearchPathMode(
+ // BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE | BASE_SEARCH_PATH_PERMANENT);
+ HMODULE h = GetModuleHandleW(L"kernel32.dll");
+ if (h != 0) {
+ FARPROC p = GetProcAddress(h, "SetProcessDEPPolicy");
+ if (p != 0) {
+ reinterpret_cast< BOOL (WINAPI *)(DWORD) >(p)(0x00000001);
+ }
+ p = GetProcAddress(h, "SetDllDirectoryW");
+ if (p != 0) {
+ reinterpret_cast< BOOL (WINAPI *)(LPCWSTR) >(p)(L"");
+ }
+ p = GetProcAddress(h, "SetSearchPathMode");
+ if (p != 0) {
+ reinterpret_cast< BOOL (WINAPI *)(DWORD) >(p)(0x8001);
+ }
+ }
+
WSADATA wsaData;
int error;
WORD wVersionRequested;
diff --git a/sal/rtl/source/makefile.mk b/sal/rtl/source/makefile.mk
index 82b9394ee90c..9968d8992be4 100644
--- a/sal/rtl/source/makefile.mk
+++ b/sal/rtl/source/makefile.mk
@@ -46,7 +46,7 @@ TARGETTYPE=CUI
.INCLUDE : settings.mk
-.IF "$(ALLOC)" == "SYS_ALLOC" || "$(ALLOC)" == "TCMALLOC"
+.IF "$(ALLOC)" == "SYS_ALLOC" || "$(ALLOC)" == "TCMALLOC" || "$(ALLOC)" == "JEMALLOC"
CDEFS+= -DFORCE_SYSALLOC
.ENDIF
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;