/* Open a lua_State, bind run information such as server arguments and
 * BOINC status, and evaluate input script. */
static lua_State* separationOpenLuaStateWithScript(const SeparationFlags* sf)
{
    char* script;
    lua_State* luaSt;

    luaSt = separationLuaOpen(FALSE);
    if (!luaSt)
        return NULL;

    script = mwReadFileResolved(sf->ap_file);
    if (!script)
    {
        perror("Opening Lua script");
        lua_close(luaSt);
        return NULL;
    }

    if (dostringWithArgs(luaSt, script, sf->forwardedArgs, sf->nForwardedArgs))
    {
        mw_lua_pcall_warn(luaSt, "Error loading Lua script '%s'", sf->ap_file);
        lua_close(luaSt);
        luaSt = NULL;
    }

    free(script);

    return luaSt;
}
static int tryEvaluateScript(lua_State* luaSt, const char* script, const SeparationFlags* sf)
{
    if (script[0] == '\0')
    {
        mw_printf("Parameter file '%s' is empty\n", sf->ap_file);
        return 1;
    }

    if (dostringWithArgs(luaSt, script, sf->forwardedArgs, sf->nForwardedArgs))
    {
        mw_lua_perror(luaSt, "Error loading Lua script '%s'", sf->ap_file);
        return 1;
    }

    return 0;
}