|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
-** $Id: loadlib.c,v 1.126 2015/02/16 13:14:33 roberto Exp roberto $
|
|
|
+** $Id: loadlib.c,v 1.127 2015/11/23 11:30:45 roberto Exp roberto $
|
|
|
** Dynamic library loader for Lua
|
|
|
** See Copyright Notice in lua.h
|
|
|
**
|
|
@@ -25,40 +25,9 @@
|
|
|
|
|
|
|
|
|
/*
|
|
|
-** LUA_PATH_VAR and LUA_CPATH_VAR are the names of the environment
|
|
|
-** variables that Lua check to set its paths.
|
|
|
-*/
|
|
|
-#if !defined(LUA_PATH_VAR)
|
|
|
-#define LUA_PATH_VAR "LUA_PATH"
|
|
|
-#endif
|
|
|
-
|
|
|
-#if !defined(LUA_CPATH_VAR)
|
|
|
-#define LUA_CPATH_VAR "LUA_CPATH"
|
|
|
-#endif
|
|
|
-
|
|
|
-#define LUA_PATHSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR
|
|
|
-
|
|
|
-#define LUA_PATHVARVERSION LUA_PATH_VAR LUA_PATHSUFFIX
|
|
|
-#define LUA_CPATHVARVERSION LUA_CPATH_VAR LUA_PATHSUFFIX
|
|
|
-
|
|
|
-/*
|
|
|
-** LUA_PATH_SEP is the character that separates templates in a path.
|
|
|
-** LUA_PATH_MARK is the string that marks the substitution points in a
|
|
|
-** template.
|
|
|
-** LUA_EXEC_DIR in a Windows path is replaced by the executable's
|
|
|
-** directory.
|
|
|
** LUA_IGMARK is a mark to ignore all before it when building the
|
|
|
** luaopen_ function name.
|
|
|
*/
|
|
|
-#if !defined (LUA_PATH_SEP)
|
|
|
-#define LUA_PATH_SEP ";"
|
|
|
-#endif
|
|
|
-#if !defined (LUA_PATH_MARK)
|
|
|
-#define LUA_PATH_MARK "?"
|
|
|
-#endif
|
|
|
-#if !defined (LUA_EXEC_DIR)
|
|
|
-#define LUA_EXEC_DIR "!"
|
|
|
-#endif
|
|
|
#if !defined (LUA_IGMARK)
|
|
|
#define LUA_IGMARK "-"
|
|
|
#endif
|
|
@@ -94,8 +63,6 @@ static const int CLIBS = 0;
|
|
|
|
|
|
#define LIB_FAIL "open"
|
|
|
|
|
|
-#define setprogdir(L) ((void)0)
|
|
|
-
|
|
|
|
|
|
/*
|
|
|
** system-dependent functions
|
|
@@ -179,7 +146,6 @@ static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
|
|
|
|
|
|
#include <windows.h>
|
|
|
|
|
|
-#undef setprogdir
|
|
|
|
|
|
/*
|
|
|
** optional flags for LoadLibraryEx
|
|
@@ -189,21 +155,6 @@ static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
|
|
|
#endif
|
|
|
|
|
|
|
|
|
-static void setprogdir (lua_State *L) {
|
|
|
- char buff[MAX_PATH + 1];
|
|
|
- char *lb;
|
|
|
- DWORD nsize = sizeof(buff)/sizeof(char);
|
|
|
- DWORD n = GetModuleFileNameA(NULL, buff, nsize);
|
|
|
- if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL)
|
|
|
- luaL_error(L, "unable to get ModuleFileName");
|
|
|
- else {
|
|
|
- *lb = '\0';
|
|
|
- luaL_gsub(L, lua_tostring(L, -1), LUA_EXEC_DIR, buff);
|
|
|
- lua_remove(L, -2); /* remove original string */
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static void pusherror (lua_State *L) {
|
|
|
int error = GetLastError();
|
|
|
char buffer[128];
|
|
@@ -666,41 +617,6 @@ static int ll_seeall (lua_State *L) {
|
|
|
|
|
|
|
|
|
|
|
|
-/* auxiliary mark (for internal use) */
|
|
|
-#define AUXMARK "\1"
|
|
|
-
|
|
|
-
|
|
|
-/*
|
|
|
-** return registry.LUA_NOENV as a boolean
|
|
|
-*/
|
|
|
-static int noenv (lua_State *L) {
|
|
|
- int b;
|
|
|
- lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV");
|
|
|
- b = lua_toboolean(L, -1);
|
|
|
- lua_pop(L, 1); /* remove value */
|
|
|
- return b;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-static void setpath (lua_State *L, const char *fieldname, const char *envname1,
|
|
|
- const char *envname2, const char *def) {
|
|
|
- const char *path = getenv(envname1);
|
|
|
- if (path == NULL) /* no environment variable? */
|
|
|
- path = getenv(envname2); /* try alternative name */
|
|
|
- if (path == NULL || noenv(L)) /* no environment variable? */
|
|
|
- lua_pushstring(L, def); /* use default */
|
|
|
- else {
|
|
|
- /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */
|
|
|
- path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP,
|
|
|
- LUA_PATH_SEP AUXMARK LUA_PATH_SEP);
|
|
|
- luaL_gsub(L, path, AUXMARK, def);
|
|
|
- lua_remove(L, -2);
|
|
|
- }
|
|
|
- setprogdir(L);
|
|
|
- lua_setfield(L, -2, fieldname);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static const luaL_Reg pk_funcs[] = {
|
|
|
{"loadlib", ll_loadlib},
|
|
|
{"searchpath", ll_searchpath},
|
|
@@ -764,10 +680,10 @@ LUAMOD_API int luaopen_package (lua_State *L) {
|
|
|
createclibstable(L);
|
|
|
luaL_newlib(L, pk_funcs); /* create 'package' table */
|
|
|
createsearcherstable(L);
|
|
|
- /* set field 'path' */
|
|
|
- setpath(L, "path", LUA_PATHVARVERSION, LUA_PATH_VAR, LUA_PATH_DEFAULT);
|
|
|
- /* set field 'cpath' */
|
|
|
- setpath(L, "cpath", LUA_CPATHVARVERSION, LUA_CPATH_VAR, LUA_CPATH_DEFAULT);
|
|
|
+ lua_pushstring(L, LUA_PATH_DEFAULT);
|
|
|
+ lua_setfield(L, -2, "path"); /* package.path = default path */
|
|
|
+ lua_pushstring(L, LUA_CPATH_DEFAULT);
|
|
|
+ lua_setfield(L, -2, "cpath"); /* package.cpath = default cpath */
|
|
|
/* store config information */
|
|
|
lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATH_SEP "\n" LUA_PATH_MARK "\n"
|
|
|
LUA_EXEC_DIR "\n" LUA_IGMARK "\n");
|