|
|
|
@ -53,12 +53,16 @@ extern int push_error(lua_State *L)
|
|
|
|
static int ex_getenv(lua_State *L)
|
|
|
|
static int ex_getenv(lua_State *L)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const char *nam = luaL_checkstring(L, 1);
|
|
|
|
const char *nam = luaL_checkstring(L, 1);
|
|
|
|
char val[1024];
|
|
|
|
char sval[256], *val = sval;
|
|
|
|
size_t len;
|
|
|
|
size_t len = GetEnvironmentVariable(nam, val, sizeof val);
|
|
|
|
len = GetEnvironmentVariable(nam, val, sizeof val);
|
|
|
|
if (sizeof sval < len) {
|
|
|
|
if (sizeof val < len || (len == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND))
|
|
|
|
val = malloc(len);
|
|
|
|
|
|
|
|
len = GetEnvironmentVariable(nam, val, sizeof val);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (len == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)
|
|
|
|
return push_error(L);
|
|
|
|
return push_error(L);
|
|
|
|
lua_pushlstring(L, val, len);
|
|
|
|
lua_pushlstring(L, val, len);
|
|
|
|
|
|
|
|
if (val != sval) free(val);
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|