From c5de7d4df4ccd7d70a511ee45e1aa901d51efb6f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 5 Nov 2011 21:15:29 -0700 Subject: Task #11442. Make work on MingW. * configure: Test for environ and GetEnvironmentStrings. * lib.c: Conditionally include . (env): Implemented for POSIX and Windows with #ifdefs. --- lib.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'lib.c') diff --git a/lib.c b/lib.c index d874e3ab..20b793e0 100644 --- a/lib.c +++ b/lib.c @@ -35,6 +35,9 @@ #include #include #include "config.h" +#ifdef HAVE_GETENVIRONMENTSTRINGS +#include +#endif #include "lib.h" #include "gc.h" #include "hash.h" @@ -2301,18 +2304,28 @@ val set_diff(val list1, val list2, val testfun, val keyfun) val env(void) { - extern char **environ; - char **iter; - if (env_list) { return env_list; } else { list_collect_decl (out, ptail); +#if HAVE_ENVIRON + extern char **environ; + char **iter = environ; - for (iter = environ; *iter != 0; iter++) + for (; *iter != 0; iter++) list_collect (ptail, string_utf8(*iter)); return env_list = out; +#elif HAVE_GETENVIRONMENTSTRINGS + wchar_t *env = GetEnvironmentStringsW(); + + for (; *env; env += wcslen(env) + 1) + list_collect (ptail, string(env)); + + return env_list = out; +#else + uw_throwf(error_s, lit("string_extend: overflow"), nao); +#endif } } -- cgit v1.2.3