diff options
Diffstat (limited to 'test/testprog.cc')
-rw-r--r-- | test/testprog.cc | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/test/testprog.cc b/test/testprog.cc index dbfb665..c135061 100644 --- a/test/testprog.cc +++ b/test/testprog.cc @@ -2,7 +2,13 @@ #include <fstream> #include <string> -extern const char **environ; // see 'man environ' +#if defined(_WIN32) +#define WINDOWS_LEAN_AND_MEAN +#include <windows.h> +#undef max +#else +extern char **environ; // see 'man environ' +#endif int main(int argc, const char* argv[]) { @@ -20,10 +26,35 @@ int main(int argc, const char* argv[]) return 0; } std::ofstream ostrm(argv[2], std::ios::binary); +#if defined(_WIN32) + auto env_strings = GetEnvironmentStrings(); + const char* ptr = env_strings; + std::string env; + while(true) + { + if(*ptr == '\0') + { + if(env.empty()) + { + // no more + break; + } + ostrm << env << "\n"; + env.clear(); + ++ptr; + continue; + } + + env += *ptr; + ++ptr; + } + FreeEnvironmentStrings(env_strings); +#else for(auto current = environ; *current; ++current) { ostrm << (*current) << "\n"; } +#endif } if(cmd == "retval") |