elua: load modules from local dirs first
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Mon, 8 Aug 2016 13:38:08 +0000 (14:38 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Mon, 8 Aug 2016 13:38:39 +0000 (14:38 +0100)
This fixes cases when running scripts locally - local modules
are preferred over systemwide, avoiding possibly outdated system
scripts from being run.

src/lib/elua/elua.c

index f537663..185f592 100644 (file)
@@ -499,28 +499,33 @@ _elua_module_system_init(lua_State *L)
    const char       *modpath  = es->moddir;
    const char       *appspath = es->appsdir;
    Eina_Stringshare *data     = NULL;
-   int n = 4;
    if (!corepath || !modpath || !appspath)
      return 0;
    lua_pushvalue(L, 1);
    es->requireref = luaL_ref(L, LUA_REGISTRYINDEX);
    lua_pushvalue(L, 2);
    es->apploadref = luaL_ref(L, LUA_REGISTRYINDEX);
-   lua_pushfstring(L, "%s/?.lua;", corepath);
+
+   /* module path, local directories take priority */
+   int n = 0;
+   lua_pushvalue(L, 3); ++n;
+   lua_pushfstring(L, ";%s/?.lua", corepath); ++n;
    EINA_LIST_FREE(es->lincs, data)
      {
-        lua_pushfstring(L, "%s/?.lua;", data);
+        lua_pushfstring(L, ";%s/?.lua", data);
         eina_stringshare_del(data);
         ++n;
      }
-   lua_pushfstring(L, "%s/?.eo.lua;", modpath);
-   lua_pushfstring(L, "%s/?.lua;", modpath);
-   lua_pushfstring(L, "%s/?.lua;", appspath);
-   lua_pushvalue(L, 3);
-   lua_concat(L, n + 1);
-   lua_pushfstring(L, "%s/?.lua;", appspath);
+   lua_pushfstring(L, ";%s/?.eo.lua", modpath); ++n;
+   lua_pushfstring(L, ";%s/?.lua", modpath); ++n;
+   lua_pushfstring(L, ";%s/?.lua", appspath); ++n;
+   lua_concat(L, n);
+
+   /* apps path, local directory takes priority as well */
    lua_pushvalue(L, 4);
+   lua_pushfstring(L, ";%s/?.lua", appspath);
    lua_concat(L, 2);
+
    return 2;
 }