From 5f6109bc4776084b093662215146f7c16247d62f Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 10 Apr 2015 11:42:09 +0100 Subject: [PATCH] elua: new API elua_state_dirs_fill + utilize --- src/bin/elua/main.c | 87 ++++++++++++++++++++++------------------------------- src/lib/elua/Elua.h | 1 + src/lib/elua/elua.c | 38 +++++++++++++++++++++++ 3 files changed, 75 insertions(+), 51 deletions(-) diff --git a/src/bin/elua/main.c b/src/bin/elua/main.c index 38cf5ce..ed83b70 100644 --- a/src/bin/elua/main.c +++ b/src/bin/elua/main.c @@ -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))) { diff --git a/src/lib/elua/Elua.h b/src/lib/elua/Elua.h index b72ada5..a05b824 100644 --- a/src/lib/elua/Elua.h +++ b/src/lib/elua/Elua.h @@ -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); diff --git a/src/lib/elua/elua.c b/src/lib/elua/elua.c index 3ab2448..ae5da0e 100644 --- a/src/lib/elua/elua.c +++ b/src/lib/elua/elua.c @@ -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) { -- 2.7.4