summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2012-10-29 12:52:27 +0000
committerJo-Philipp Wich <jow@openwrt.org>2012-10-29 12:52:27 +0000
commit06901331f5c8a0cfdb19520e1feed90fd4415b32 (patch)
tree338de77d5160e123ce5501e6a61ae4ecf1b92292 /libs
parent74d93e3139d75177d5e611841b3fcc2794dbacf9 (diff)
Fix nixio exece()
I had occasion to use nixio.exece() recently and I could not figure out what it wanted for the third argument (the environment) as no matter what sort of table I passed, even nixio.getenv(), would fail with bad argument #3 to 'exece' (invalid environment). What it should expect is a table full of string values for keys and something that can be converted to a string as a value, however it inverts the value of lua_type() and compares it against a type, which will never evaluate to true. Getting past this, the code inserts the KEY=VALUE string before the arg userdata, and then forgets to take the env userdata into account when collecting the arguments back into a C char**. This patch addresses all these issues and provides a working nixio.exece(). [Fixes #500]
Diffstat (limited to 'libs')
-rw-r--r--libs/nixio/src/process.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/libs/nixio/src/process.c b/libs/nixio/src/process.c
index 45c06a644e..5ae9b829ea 100644
--- a/libs/nixio/src/process.c
+++ b/libs/nixio/src/process.c
@@ -65,14 +65,14 @@ int nixio__exec(lua_State *L, int m) {
return luaL_error(L, "stack overflow");
}
- if (!lua_type(L, -2) != LUA_TSTRING || !lua_isstring(L, -1)) {
+ if (lua_type(L, -2) != LUA_TSTRING || !lua_isstring(L, -1)) {
return luaL_argerror(L, 3, "invalid environment");
}
lua_pushfstring(L, "%s=%s",
lua_tostring(L, -2), lua_tostring(L, -1));
- lua_insert(L, 4);
+ lua_insert(L, 5);
lua_pop(L, 1);
argn++;
}
@@ -80,8 +80,8 @@ int nixio__exec(lua_State *L, int m) {
char **env = lua_newuserdata(L, sizeof(char*) * (argn + 1));
env[argn] = NULL;
- for (i = 1; i < argn; i++) {
- env[i-1] = (char *)lua_tostring(L, -i);
+ for (i = 1; i <= argn; i++) {
+ env[i-1] = (char *)lua_tostring(L, -(i+1));
}
execve(path, args, env);