From b436156f5bdcc9ce3f3f93dd30a7bcbdb87910f7 Mon Sep 17 00:00:00 2001 From: "HE, Tao" Date: Tue, 18 Dec 2018 16:49:32 +0800 Subject: [PATCH] Mingw-w64 on windows doesn't have `setenv`, fix that. Signed-off-by: HE, Tao --- configure.ac | 1 + src/builtin.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) 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 ], [0]) AC_FIND_FUNC([_isatty], [c], [#include ], [0]) AC_FIND_FUNC([strptime], [c], [#include ], [0, 0, 0]) AC_FIND_FUNC([strftime], [c], [#include ], [0, 0, 0, 0]) +AC_FIND_FUNC([setenv], [c], [#include ], [0, 0, 0]) AC_FIND_FUNC([timegm], [c], [#include ], [0]) AC_FIND_FUNC([gmtime_r], [c], [#include ], [0, 0]) AC_FIND_FUNC([gmtime], [c], [#include ], [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.