elua: new API elua_state_dirs_fill + utilize
authorDaniel Kolesa <d.kolesa@samsung.com>
Fri, 10 Apr 2015 10:42:09 +0000 (11:42 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Wed, 6 May 2015 14:05:19 +0000 (15:05 +0100)
src/bin/elua/main.c
src/lib/elua/Elua.h
src/lib/elua/elua.c

index 38cf5ce..ed83b70 100644 (file)
@@ -288,8 +288,7 @@ elua_main(lua_State *L)
                hasexec = EINA_FALSE;
    Eina_List  *largs   = NULL, *l = NULL;
    Arg_Data   *data    = NULL;
-   char       *coredir = NULL, *moddir = NULL, *appsdir = NULL;
-   char coredirbuf[PATH_MAX], moddirbuf[PATH_MAX], appsdirbuf[PATH_MAX];
+   const char *coredir = NULL, *moddir = NULL, *appsdir = NULL;
    char        modfile[PATH_MAX];
 
    int ch;
@@ -306,29 +305,31 @@ elua_main(lua_State *L)
      {
         switch (ch)
           {
-             case 'h':
-                elua_print_help(elua_progname, stdout);
-                return 0;
-             case 'C':
-                coredir = optarg;
+           case 'h':
+             elua_print_help(elua_progname, stdout);
+             return 0;
+           case 'C':
+             coredir = optarg;
+             break;
+           case 'M':
+             moddir = optarg;
+             break;
+           case 'A':
+             appsdir = optarg;
+             break;
+           case 'e':
+           case 'l':
+           case 'I':
+             {
+                Arg_Data *v = malloc(sizeof(Arg_Data));
+                v->type = (ch == 'e') ? ARG_CODE : ((ch == 'l')
+                                      ? ARG_LIBRARY : ARG_LIBDIR);
+                v->value = optarg;
+                largs = eina_list_append(largs, v);
                 break;
-             case 'M':
-                moddir = optarg;
-                break;
-             case 'A':
-                appsdir = optarg;
-                break;
-             case 'e':
-             case 'l':
-             case 'I':
-               {
-                  Arg_Data *v = malloc(sizeof(Arg_Data));
-                  v->type = (ch == 'e') ? ARG_CODE : ((ch == 'l')
-                                        ? ARG_LIBRARY : ARG_LIBDIR);
-                  v->value = optarg;
-                  largs = eina_list_append(largs, v);
-                  break;
-               }
+             }
+           case 'E':
+             noenv = EINA_TRUE;
           }
      }
 
@@ -347,36 +348,20 @@ elua_main(lua_State *L)
         return 0;
      }
 
-   if (!coredir)
-     {
-        if (noenv || !(coredir = getenv("ELUA_CORE_DIR")) || !coredir[0])
-          {
-             coredir = coredirbuf;
-             snprintf(coredirbuf, sizeof(coredirbuf), "%s/core",
-                      eina_prefix_data_get(elua_prefix));
-          }
-     }
-   if (!moddir)
-     {
-        if (noenv || !(moddir = getenv("ELUA_MODULES_DIR")) || !moddir[0])
-          {
-             moddir = moddirbuf;
-             snprintf(moddirbuf, sizeof(moddirbuf), "%s/modules",
-                      eina_prefix_data_get(elua_prefix));
-          }
-     }
-   if (!appsdir)
+   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)
      {
-        if (noenv || !(appsdir = getenv("ELUA_APPS_DIR")) || !appsdir[0])
-          {
-             appsdir = appsdirbuf;
-             snprintf(appsdirbuf, sizeof(appsdirbuf), "%s/apps",
-                      eina_prefix_data_get(elua_prefix));
-          }
+        ERR("could not set one or more script directories");
+        m->status = 1;
+        return 0;
      }
 
-   elua_state_dirs_set(es, coredir, moddir, appsdir);
-
    snprintf(modfile, sizeof(modfile), "%s/module.lua", coredir);
    if (elua_report_error(es, elua_progname, elua_io_loadfile(es, modfile)))
      {
index b72ada5..a05b824 100644 (file)
@@ -72,6 +72,7 @@ EAPI void elua_state_free(Elua_State *es);
 
 EAPI void elua_state_dirs_set(Elua_State *es, const char *core,
                               const char *mods, const char *apps);
+EAPI void elua_state_dirs_fill(Elua_State *es, Eina_Bool ignore_env);
 
 EAPI Eina_Stringshare *elua_state_core_dir_get(const Elua_State *es);
 EAPI Eina_Stringshare *elua_state_mod_dir_get(const Elua_State *es);
index 3ab2448..ae5da0e 100644 (file)
@@ -109,6 +109,44 @@ elua_state_dirs_set(Elua_State *es, const char *core, const char *mods,
    if (apps) es->appsdir = eina_stringshare_add(apps);
 }
 
+EAPI void
+elua_state_dirs_fill(Elua_State *es, Eina_Bool ignore_env)
+{
+   const char *coredir = NULL, *moddir = NULL, *appsdir = NULL;
+   char coredirbuf[PATH_MAX], moddirbuf[PATH_MAX], appsdirbuf[PATH_MAX];
+   EINA_SAFETY_ON_NULL_RETURN(es);
+   if (!(coredir = es->coredir))
+     {
+        if (ignore_env || !(coredir = getenv("ELUA_CORE_DIR")) || !coredir[0])
+          {
+             coredir = coredirbuf;
+             snprintf(coredirbuf, sizeof(coredirbuf), "%s/core",
+                      eina_prefix_data_get(_elua_pfx));
+          }
+        if (coredir) es->coredir = eina_stringshare_add(coredir);
+     }
+   if (!(moddir = es->moddir))
+     {
+        if (ignore_env || !(moddir = getenv("ELUA_MODULES_DIR")) || !moddir[0])
+          {
+             moddir = moddirbuf;
+             snprintf(moddirbuf, sizeof(moddirbuf), "%s/modules",
+                      eina_prefix_data_get(_elua_pfx));
+          }
+        if (moddir) es->moddir = eina_stringshare_add(moddir);
+     }
+   if (!(appsdir = es->appsdir))
+     {
+        if (ignore_env || !(appsdir = getenv("ELUA_APPS_DIR")) || !appsdir[0])
+          {
+             appsdir = appsdirbuf;
+             snprintf(appsdirbuf, sizeof(appsdirbuf), "%s/apps",
+                      eina_prefix_data_get(_elua_pfx));
+          }
+        if (appsdir) es->appsdir = eina_stringshare_add(appsdir);
+     }
+}
+
 EAPI Eina_Stringshare *
 elua_state_core_dir_get(const Elua_State *es)
 {