diff options
| author | Jo-Philipp Wich <jow@openwrt.org> | 2012-10-29 12:52:27 +0000 |
|---|---|---|
| committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-10-29 12:52:27 +0000 |
| commit | 06901331f5c8a0cfdb19520e1feed90fd4415b32 (patch) | |
| tree | 338de77d5160e123ce5501e6a61ae4ecf1b92292 /libs | |
| parent | 74d93e3139d75177d5e611841b3fcc2794dbacf9 (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.c | 8 |
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); |
