diff options
author | sb <sb@openoffice.org> | 2010-09-16 16:45:57 +0200 |
---|---|---|
committer | sb <sb@openoffice.org> | 2010-09-16 16:45:57 +0200 |
commit | d8d1b35406e3c3fa820f976914257676f81bc848 (patch) | |
tree | 3b4944aa807eba42d1b99e725c77b8c247fd8180 /sal | |
parent | ce8677050293f93d38e21e3632af01c5de022491 (diff) | |
parent | 3813e349c8c3a7ac14af729085614fccb59fa5a5 (diff) |
sb126: merged in DEV300_m87
Diffstat (limited to 'sal')
-rw-r--r-- | sal/cppunittester/cppunittester.cxx | 2 | ||||
-rw-r--r-- | sal/cppunittester/makefile.mk | 7 | ||||
-rw-r--r-- | sal/inc/osl/process.h | 15 | ||||
-rw-r--r-- | sal/osl/os2/process_impl.cxx | 92 | ||||
-rw-r--r-- | sal/osl/os2/system.h | 3 | ||||
-rw-r--r-- | sal/osl/unx/process_impl.cxx | 107 | ||||
-rw-r--r-- | sal/osl/w32/process.cxx | 19 | ||||
-rw-r--r-- | sal/osl/w32/salinit.cxx | 20 | ||||
-rw-r--r-- | sal/rtl/source/makefile.mk | 2 | ||||
-rwxr-xr-x | sal/util/sal.map | 7 |
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; |