elua lib: add elua_state_setup_modules + use
authorDaniel Kolesa <d.kolesa@samsung.com>
Fri, 10 Apr 2015 16:04:07 +0000 (17:04 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Wed, 6 May 2015 14:05:20 +0000 (15:05 +0100)
src/bin/elua/main.c
src/lib/elua/Elua.h
src/lib/elua/elua.c

index cf499aa..062ddf6 100644 (file)
@@ -49,13 +49,6 @@ struct Main_Data
    int          status;
 };
 
-const luaL_reg cutillib[] =
-{
-   { "init_module", elua_module_init },
-   { "popenv"     , elua_io_popen    },
-   { NULL         , NULL             }
-};
-
 static void
 elua_print_help(const char *pname, FILE *stream)
 {
@@ -95,7 +88,6 @@ elua_main(lua_State *L)
                hasexec = EINA_FALSE;
    Eina_List  *largs   = NULL;
    const char *coredir = NULL, *moddir = NULL, *appsdir = NULL;
-   char        modfile[PATH_MAX];
    char       *data    = NULL;
 
    int ch;
@@ -144,26 +136,7 @@ elua_main(lua_State *L)
    elua_state_dirs_set(es, coredir, moddir, appsdir);
    elua_state_dirs_fill(es, noenv);
 
-   coredir = elua_state_core_dir_get(es);
-   moddir  = elua_state_mod_dir_get(es);
-   appsdir = elua_state_apps_dir_get(es);
-
-   if (!coredir || !moddir || !appsdir)
-     {
-        ERR("could not set one or more script directories");
-        goto error;
-     }
-
-   snprintf(modfile, sizeof(modfile), "%s/module.lua", coredir);
-   if (elua_report_error(es, elua_state_prog_name_get(es),
-       elua_io_loadfile(es, modfile)))
-     goto error;
-   lua_pushcfunction(L, elua_module_system_init);
-   lua_createtable(L, 0, 0);
-   luaL_register(L, NULL, cutillib);
-   lua_call(L, 2, 0);
-
-   if (!elua_state_setup_i18n(es))
+   if (!elua_state_setup_modules(es) || !elua_state_setup_i18n(es))
      goto error;
 
    elua_io_register(es);
index 5100f51..e9bd6ee 100644 (file)
@@ -90,6 +90,7 @@ EAPI lua_State *elua_state_lua_state_get(const Elua_State *es);
 EAPI int elua_report_error(const Elua_State *es, const char *pname, int status);
 
 EAPI Eina_Bool elua_state_setup_i18n(const Elua_State *es);
+EAPI Eina_Bool elua_state_setup_modules(const Elua_State *es);
 
 EAPI int elua_io_loadfile(const Elua_State *es, const char *fname);
 EAPI void elua_io_register(const Elua_State *es);
index 3bda98b..c124b20 100644 (file)
@@ -295,9 +295,9 @@ elua_state_setup_i18n(const Elua_State *es)
    EINA_SAFETY_ON_NULL_RETURN_VAL(es, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(es->luastate, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(es->coredir, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(es->progname, EINA_FALSE);
    snprintf(buf, sizeof(buf), "%s/gettext.lua", es->coredir);
-   if (elua_report_error(es, elua_state_prog_name_get(es),
-       elua_io_loadfile(es, buf)))
+   if (elua_report_error(es, es->progname, elua_io_loadfile(es, buf)))
      return EINA_FALSE;
    lua_createtable(es->luastate, 0, 0);
    luaL_register(es->luastate, NULL, gettextlib);
@@ -311,6 +311,31 @@ elua_state_setup_i18n(const Elua_State *es)
    return EINA_TRUE;
 }
 
+const luaL_reg _elua_cutillib[] =
+{
+   { "init_module", elua_module_init },
+   { "popenv"     , elua_io_popen    },
+   { NULL         , NULL             }
+};
+
+EAPI Eina_Bool
+elua_state_setup_modules(const Elua_State *es)
+{
+   char buf[PATH_MAX];
+   EINA_SAFETY_ON_NULL_RETURN_VAL(es, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(es->luastate, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(es->coredir, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(es->progname, EINA_FALSE);
+   snprintf(buf, sizeof(buf), "%s/module.lua", es->coredir);
+   if (elua_report_error(es, es->progname, elua_io_loadfile(es, buf)))
+     return EINA_FALSE;
+   lua_pushcfunction(es->luastate, elua_module_system_init);
+   lua_createtable(es->luastate, 0, 0);
+   luaL_register(es->luastate, NULL, _elua_cutillib);
+   lua_call(es->luastate, 2, 0);
+   return EINA_TRUE;
+}
+
 EAPI int
 elua_module_init(lua_State *L)
 {