From be8ad39d984ddd9ce317ea1471369f280f747fb6 Mon Sep 17 00:00:00 2001 From: mark Date: Tue, 31 Jan 2006 05:16:17 +0000 Subject: [PATCH] ex_getenv() now supports arbitrarily-sized variables --- w32api/ex.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/w32api/ex.c b/w32api/ex.c index df6baa8..4f54bb4 100755 --- a/w32api/ex.c +++ b/w32api/ex.c @@ -53,12 +53,16 @@ extern int push_error(lua_State *L) static int ex_getenv(lua_State *L) { const char *nam = luaL_checkstring(L, 1); - char val[1024]; - size_t len; - len = GetEnvironmentVariable(nam, val, sizeof val); - if (sizeof val < len || (len == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) + char sval[256], *val = sval; + size_t len = GetEnvironmentVariable(nam, val, sizeof val); + if (sizeof sval < len) { + val = malloc(len); + len = GetEnvironmentVariable(nam, val, sizeof val); + } + if (len == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND) return push_error(L); lua_pushlstring(L, val, len); + if (val != sval) free(val); return 1; }