summaryrefslogtreecommitdiff
path: root/test/testprog.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/testprog.cc')
-rw-r--r--test/testprog.cc33
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")