void environment(Options* pEnvironment) { // get all environment strings (as unicode) LPWSTR lpEnv = ::GetEnvironmentStringsW(); if (lpEnv == NULL) { LOG_ERROR(systemError(::GetLastError(), ERROR_LOCATION)); return; } // iterate over them LPWSTR lpszEnvVar = NULL; for (lpszEnvVar = lpEnv; *lpszEnvVar; lpszEnvVar++) { // get the variable std::wstring envVarWide; while (*lpszEnvVar) { wchar_t ch = *lpszEnvVar; envVarWide.append(1, ch); lpszEnvVar++; } // convert to utf8 and parse Option envVar; if (parseEnvVar(string_utils::wideToUtf8(envVarWide), &envVar)) pEnvironment->push_back(envVar); } // free environment strings if (!::FreeEnvironmentStringsW(lpEnv)) LOG_ERROR(systemError(::GetLastError(), ERROR_LOCATION)); }
void environment(Options* pEnvironment) { for (char **env = environ; *env; ++env) { Option envVar; if (parseEnvVar(std::string(*env), &envVar)) pEnvironment->push_back(envVar); } }