diff options
author | HE, Tao <sighingnow@gmail.com> | 2018-12-18 16:49:32 +0800 |
---|---|---|
committer | Nico Williams <nico@cryptonector.com> | 2018-12-19 09:07:14 -0600 |
commit | b436156f5bdcc9ce3f3f93dd30a7bcbdb87910f7 (patch) | |
tree | 1a24c5e2c0b550db406419f263375387f27632f2 | |
parent | fb1c635af6ca9825707e2372ad6efdd317d674a6 (diff) |
Mingw-w64 on windows doesn't have `setenv`, fix that.
Signed-off-by: HE, Tao <sighingnow@gmail.com>
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | src/builtin.c | 21 |
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. |