util.pposix: Add setenv()
authorKim Alvefur <zash@zash.se>
Tue, 3 Jul 2012 13:43:46 +0000 (15:43 +0200)
committerKim Alvefur <zash@zash.se>
Tue, 3 Jul 2012 13:43:46 +0000 (15:43 +0200)
util-src/pposix.c

index dae48390ab9e9a08eec7e81e0647075f4a07eb39..a5a89d55f3255102e19e720a91aeabd9ea589af4 100644 (file)
@@ -581,6 +581,37 @@ int lc_uname(lua_State* L)
        return 1;
 }
 
+int lc_setenv(lua_State* L)
+{
+       const char *var = luaL_checkstring(L, 1);
+       const char *value;
+
+       /* If the second argument is nil or nothing, unset the var */
+       if(lua_isnoneornil(L, 2))
+       {
+               if(unsetenv(var) != 0)
+               {
+                       lua_pushnil(L);
+                       lua_pushstring(L, strerror(errno));
+                       return 2;
+               }
+               lua_pushboolean(L, 1);
+               return 1;
+       }
+
+       value = luaL_checkstring(L, 2);
+
+       if(setenv(var, value, 1) != 0)
+       {
+               lua_pushnil(L);
+               lua_pushstring(L, strerror(errno));
+               return 2;
+       }
+
+       lua_pushboolean(L, 1);
+       return 1;
+}
+
 /* Register functions */
 
 int luaopen_util_pposix(lua_State *L)
@@ -612,6 +643,8 @@ int luaopen_util_pposix(lua_State *L)
 
                { "uname", lc_uname },
 
+               { "setenv", lc_setenv },
+
                { NULL, NULL }
        };