Set &error in parse_command, return it from luaA_spawn

In case of parse errors from `g_shell_parse_argv`, this now gets
returned by `luaA_spawn`.
This commit is contained in:
Daniel Hahler 2015-03-31 01:17:45 +02:00
parent 07486f7ead
commit a899a46664
1 changed files with 8 additions and 5 deletions

13
spawn.c
View File

@ -264,7 +264,7 @@ spawn_callback(gpointer user_data)
* \return The argv array for the new process. * \return The argv array for the new process.
*/ */
static gchar ** static gchar **
parse_command(lua_State *L, int idx) parse_command(lua_State *L, int idx, GError **error)
{ {
gchar **argv = NULL; gchar **argv = NULL;
idx = luaA_absindex(L, idx); idx = luaA_absindex(L, idx);
@ -272,7 +272,7 @@ parse_command(lua_State *L, int idx)
if (lua_isstring(L, idx)) if (lua_isstring(L, idx))
{ {
const char *cmd = luaL_checkstring(L, idx); const char *cmd = luaL_checkstring(L, idx);
if(!g_shell_parse_argv(cmd, NULL, &argv, NULL)) if(!g_shell_parse_argv(cmd, NULL, &argv, error))
return NULL; return NULL;
} }
else if (lua_istable(L, idx)) else if (lua_istable(L, idx))
@ -328,11 +328,15 @@ luaA_spawn(lua_State *L)
if(lua_gettop(L) >= 2) if(lua_gettop(L) >= 2)
use_sn = luaA_checkboolean(L, 2); use_sn = luaA_checkboolean(L, 2);
argv = parse_command(L, 1); GError *error = NULL;
argv = parse_command(L, 1, &error);
if(!argv || !argv[0]) if(!argv || !argv[0])
{ {
g_strfreev(argv); g_strfreev(argv);
return 0; /* push error on stack */
lua_pushfstring(L, "spawn: parse error: %s", error->message);
g_error_free(error);
return 1;
} }
SnLauncherContext *context = NULL; SnLauncherContext *context = NULL;
@ -350,7 +354,6 @@ luaA_spawn(lua_State *L)
sn_launcher_context_setup_child_process(context); sn_launcher_context_setup_child_process(context);
} }
GError *error = NULL;
retval = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, retval = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
spawn_callback, NULL, &pid, &error); spawn_callback, NULL, &pid, &error);
g_strfreev(argv); g_strfreev(argv);