diff options
Diffstat (limited to 'sal/osl/w32/process.cxx')
-rw-r--r-- | sal/osl/w32/process.cxx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx index 758100fc3417..8cb92e9257c3 100644 --- a/sal/osl/w32/process.cxx +++ b/sal/osl/w32/process.cxx @@ -448,6 +448,35 @@ void SAL_CALL osl_setCommandArgs (int argc, char ** argv) #define ENV_BUFFER_SIZE (32*1024-1) +oslProcessError SAL_CALL osl_getAllEnvironment(rtl_uString **ppustrVars) +{ + sal_uInt32 countenv; + LPTCH environ = GetEnvironmentStrings(); + + for (LPSTR **env = environ; *env; ++env) + countenv++; + + if (ppustrVars) + { + rtl_uString **temp; + for (temp = ppustrVars; *temp; ++temp) + rtl_freeMemory(*temp); + + rtl_freeMemory(temp); + } + + ppustrVars = static_cast<rtl_uString**>(rtl_allocateMemory(sizeof(rtl_uString*) * countenv)); + + for (char **env = environ; *env; ++env, ++ppustrVars) + { + rtl_uString *pstrTmp = nullptr; + rtl_uString_newFromAscii(&pstrTmp, *env); + ppustrVars = &pstrTmp; + } + return osl_Process_E_None; +} + + oslProcessError SAL_CALL osl_getEnvironment(rtl_uString *ustrVar, rtl_uString **ustrValue) { WCHAR buff[ENV_BUFFER_SIZE]; |