summaryrefslogtreecommitdiff
path: root/test/testprog.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2024-12-23 12:14:46 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2024-12-26 15:32:45 +0100
commitc96f8afe3b3e453dcc6d4b8c9e0ae3b143e2188f (patch)
treec5b9c1162cb6086083fbe4d179cacedb5a0e9c2c /test/testprog.cc
parent78c5477b3989d67169de2d05665adfb801caab23 (diff)
WIP
Diffstat (limited to 'test/testprog.cc')
-rw-r--r--test/testprog.cc38
1 files changed, 37 insertions, 1 deletions
diff --git a/test/testprog.cc b/test/testprog.cc
index dbfb665..58a31ac 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[])
{
@@ -19,11 +25,41 @@ int main(int argc, const char* argv[])
{
return 0;
}
+
std::ofstream ostrm(argv[2], std::ios::binary);
+ if(ostrm.bad())
+ {
+ std::cout << "Error: Could not write to " << argv[2] << "\n";
+ }
+#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")