mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-07-05 11:51:52 +00:00
FS-6241 --resolve
This commit is contained in:
@@ -81,7 +81,7 @@ static int traceback(lua_State * L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int docall(lua_State * L, int narg, int nresults, int perror)
|
||||
int docall(lua_State * L, int narg, int nresults, int perror, int fatal)
|
||||
{
|
||||
int status;
|
||||
int base = lua_gettop(L) - narg; /* function index */
|
||||
@@ -102,9 +102,13 @@ int docall(lua_State * L, int narg, int nresults, int perror)
|
||||
if (!zstr(err)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s\n", err);
|
||||
}
|
||||
//lua_pop(L, 1); /* pop error message from the stack */
|
||||
|
||||
// pass error up to top
|
||||
lua_error(L);
|
||||
if (fatal) {
|
||||
lua_error(L);
|
||||
} else {
|
||||
lua_pop(L, 1); /* pop error message from the stack */
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
@@ -123,7 +127,7 @@ static lua_State *lua_init(void)
|
||||
luaopen_freeswitch(L);
|
||||
lua_gc(L, LUA_GCRESTART, 0);
|
||||
lua_atpanic(L, panic);
|
||||
error = luaL_loadbuffer(L, buff, strlen(buff), "line") || docall(L, 0, 0, 0);
|
||||
error = luaL_loadbuffer(L, buff, strlen(buff), "line") || docall(L, 0, 0, 0, 1);
|
||||
}
|
||||
return L;
|
||||
}
|
||||
@@ -142,10 +146,10 @@ static int lua_parse_and_execute(lua_State * L, char *input_code)
|
||||
|
||||
if (*input_code == '~') {
|
||||
char *buff = input_code + 1;
|
||||
error = luaL_loadbuffer(L, buff, strlen(buff), "line") || docall(L, 0, 0, 0); //lua_pcall(L, 0, 0, 0);
|
||||
error = luaL_loadbuffer(L, buff, strlen(buff), "line") || docall(L, 0, 0, 0, 1); //lua_pcall(L, 0, 0, 0);
|
||||
} else if (!strncasecmp(input_code, "#!/lua", 6)) {
|
||||
char *buff = input_code + 6;
|
||||
error = luaL_loadbuffer(L, buff, strlen(buff), "line") || docall(L, 0, 0, 0); //lua_pcall(L, 0, 0, 0);
|
||||
error = luaL_loadbuffer(L, buff, strlen(buff), "line") || docall(L, 0, 0, 0, 1); //lua_pcall(L, 0, 0, 0);
|
||||
} else {
|
||||
char *args = strchr(input_code, ' ');
|
||||
if (args) {
|
||||
@@ -169,14 +173,14 @@ static int lua_parse_and_execute(lua_State * L, char *input_code)
|
||||
}
|
||||
|
||||
if (code) {
|
||||
error = luaL_loadbuffer(L, code, strlen(code), "line") || docall(L, 0, 0, 0);
|
||||
error = luaL_loadbuffer(L, code, strlen(code), "line") || docall(L, 0, 0, 0, 1);
|
||||
switch_safe_free(code);
|
||||
}
|
||||
} else {
|
||||
// Force empty argv table
|
||||
char *code = NULL;
|
||||
code = switch_mprintf("argv = {[0]='%s'};", input_code);
|
||||
error = luaL_loadbuffer(L, code, strlen(code), "line") || docall(L, 0, 0, 0);
|
||||
error = luaL_loadbuffer(L, code, strlen(code), "line") || docall(L, 0, 0, 0, 1);
|
||||
switch_safe_free(code);
|
||||
}
|
||||
|
||||
@@ -188,7 +192,7 @@ static int lua_parse_and_execute(lua_State * L, char *input_code)
|
||||
switch_assert(fdup);
|
||||
file = fdup;
|
||||
}
|
||||
error = luaL_loadfile(L, file) || docall(L, 0, 0, 0);
|
||||
error = luaL_loadfile(L, file) || docall(L, 0, 0, 0, 1);
|
||||
switch_safe_free(fdup);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user