summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHE, Tao <sighingnow@gmail.com>2018-12-18 16:49:32 +0800
committerNico Williams <nico@cryptonector.com>2018-12-19 09:07:14 -0600
commitb436156f5bdcc9ce3f3f93dd30a7bcbdb87910f7 (patch)
tree1a24c5e2c0b550db406419f263375387f27632f2
parentfb1c635af6ca9825707e2372ad6efdd317d674a6 (diff)
Mingw-w64 on windows doesn't have `setenv`, fix that.
Signed-off-by: HE, Tao <sighingnow@gmail.com>
-rw-r--r--configure.ac1
-rw-r--r--src/builtin.c21
2 files changed, 22 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 280694ce..97f4eab4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -124,6 +124,7 @@ AC_FIND_FUNC([isatty], [c], [#include <unistd.h>], [0])
AC_FIND_FUNC([_isatty], [c], [#include <io.h>], [0])
AC_FIND_FUNC([strptime], [c], [#include <time.h>], [0, 0, 0])
AC_FIND_FUNC([strftime], [c], [#include <time.h>], [0, 0, 0, 0])
+AC_FIND_FUNC([setenv], [c], [#include <stdlib.h>], [0, 0, 0])
AC_FIND_FUNC([timegm], [c], [#include <time.h>], [0])
AC_FIND_FUNC([gmtime_r], [c], [#include <time.h>], [0, 0])
AC_FIND_FUNC([gmtime], [c], [#include <time.h>], [0])
diff --git a/src/builtin.c b/src/builtin.c
index c6c8c2ea..09c0058e 100644
--- a/src/builtin.c
+++ b/src/builtin.c
@@ -1186,6 +1186,27 @@ static jv tm2jv(struct tm *tm) {
jv_number(tm->tm_yday));
}
+#if defined(WIN32) && !defined(HAVE_SETENV)
+static int setenv(const char *var, const char *val, int ovr)
+{
+ BOOL b;
+ char c[2];
+ if (!ovr)
+ {
+ DWORD d;
+ d = GetEnvironmentVariableA (var, c, 2);
+ if (0 != d && GetLastError () != ERROR_ENVVAR_NOT_FOUND) {
+ return d;
+ }
+ }
+ b = SetEnvironmentVariableA (var, val);
+ if (b) {
+ return 0;
+ }
+ return 1;
+}
+#endif
+
/*
* mktime() has side-effects and anyways, returns time in the local
* timezone, not UTC. We want timegm(), which isn't standard.