summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Lillqvist <tlillqvist@novell.com>2011-01-25 16:24:07 +0200
committerTor Lillqvist <tlillqvist@novell.com>2011-01-25 16:35:41 +0200
commitdd9197c7fb95be7c1eb1fe25bf78eadcb447b77c (patch)
tree05096b1b1cf5ffa710d4a5912598ee1ee3484286
parentCode-cleanup for testintrosp.cxx. (diff)
downloadcore-dd9197c7fb95be7c1eb1fe25bf78eadcb447b77c.tar.gz
core-dd9197c7fb95be7c1eb1fe25bf78eadcb447b77c.zip
Manipulate also the C runtime's environment
Fixes fdo#33355.
-rw-r--r--sal/osl/w32/process.cxx16
1 files changed, 16 insertions, 0 deletions
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx
index 6506b62dbd61..3fec90a8483a 100644
--- a/sal/osl/w32/process.cxx
+++ b/sal/osl/w32/process.cxx
@@ -28,6 +28,7 @@
#define UNICODE
#include "system.h"
+#include <string.h>
#ifdef _MSC_VER
#pragma warning(push,1) /* disable warnings within system headers */
#endif
@@ -419,7 +420,15 @@ oslProcessError SAL_CALL osl_setEnvironment(rtl_uString *ustrVar, rtl_uString *u
LPCWSTR lpName = reinterpret_cast<LPCWSTR>(ustrVar->buffer);
LPCWSTR lpValue = reinterpret_cast<LPCWSTR>(ustrValue->buffer);
if (SetEnvironmentVariableW(lpName, lpValue))
+ {
+ wchar_t *buffer = new wchar_t[wcslen(lpName) + 1 + wcslen(lpValue) + 1];
+ wcscpy(buffer, lpName);
+ wcscat(buffer, L"=");
+ wcscat(buffer, lpValue);
+ _wputenv(buffer);
+ delete[] buffer;
return osl_Process_E_None;
+ }
return osl_Process_E_Unknown;
}
@@ -429,7 +438,14 @@ oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString *ustrVar)
//process's environment.
LPCWSTR lpName = reinterpret_cast<LPCWSTR>(ustrVar->buffer);
if (SetEnvironmentVariableW(lpName, NULL))
+ {
+ wchar_t *buffer = new wchar_t[wcslen(lpName) + 1 + 1];
+ wcscpy(buffer, lpName);
+ wcscat(buffer, L"=");
+ _wputenv(buffer);
+ delete[] buffer;
return osl_Process_E_None;
+ }
return osl_Process_E_Unknown;
}