diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-01-12 15:14:26 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-01-12 15:14:26 -0200 |
commit | 94c1b3a8eef6778cf995b906d77c0c066c6d55f3 (patch) | |
tree | 1b7cd3a0d95a655d9e5016046e56063ab548aeba /lua.c | |
parent | 08199ade4ace6addd63148df4c596d6b61def8cd (diff) | |
download | lua-94c1b3a8eef6778cf995b906d77c0c066c6d55f3.tar.gz lua-94c1b3a8eef6778cf995b906d77c0c066c6d55f3.tar.bz2 lua-94c1b3a8eef6778cf995b906d77c0c066c6d55f3.zip |
Handling of LUA_PATH/LUA_CPATH moved back to 'package' library
to avoid incompatibilites with previous releases
Diffstat (limited to 'lua.c')
-rw-r--r-- | lua.c | 93 |
1 files changed, 5 insertions, 88 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lua.c,v 1.228 2016/12/13 15:50:58 roberto Exp roberto $ | 2 | ** $Id: lua.c,v 1.229 2016/12/22 13:08:50 roberto Exp roberto $ |
3 | ** Lua stand-alone interpreter | 3 | ** Lua stand-alone interpreter |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -20,8 +20,6 @@ | |||
20 | #include "lualib.h" | 20 | #include "lualib.h" |
21 | 21 | ||
22 | 22 | ||
23 | #define LUA_VERSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR | ||
24 | |||
25 | 23 | ||
26 | #if !defined(LUA_PROMPT) | 24 | #if !defined(LUA_PROMPT) |
27 | #define LUA_PROMPT "> " | 25 | #define LUA_PROMPT "> " |
@@ -534,88 +532,6 @@ static int runargs (lua_State *L, char **argv, int n) { | |||
534 | 532 | ||
535 | 533 | ||
536 | 534 | ||
537 | /* | ||
538 | ** {================================================================== | ||
539 | ** Set Paths | ||
540 | ** =================================================================== | ||
541 | */ | ||
542 | |||
543 | /* | ||
544 | ** LUA_PATH_VAR and LUA_CPATH_VAR are the names of the environment | ||
545 | ** variables that Lua check to set its paths. | ||
546 | */ | ||
547 | #if !defined(LUA_PATH_VAR) | ||
548 | #define LUA_PATH_VAR "LUA_PATH" | ||
549 | #endif | ||
550 | |||
551 | #if !defined(LUA_CPATH_VAR) | ||
552 | #define LUA_CPATH_VAR "LUA_CPATH" | ||
553 | #endif | ||
554 | |||
555 | #define LUA_PATHVARVERSION LUA_PATH_VAR LUA_VERSUFFIX | ||
556 | #define LUA_CPATHVARVERSION LUA_CPATH_VAR LUA_VERSUFFIX | ||
557 | |||
558 | |||
559 | #define AUXMARK "\1" /* auxiliary mark */ | ||
560 | |||
561 | |||
562 | #if defined(LUA_USE_WINDOWS) | ||
563 | |||
564 | |||
565 | /* | ||
566 | ** Replace in the path (on the top of the stack) any occurrence | ||
567 | ** of LUA_EXEC_DIR with the executable's path. | ||
568 | */ | ||
569 | static void setprogdir (lua_State *L) { | ||
570 | char buff[MAX_PATH + 1]; | ||
571 | char *lb; | ||
572 | DWORD nsize = sizeof(buff)/sizeof(char); | ||
573 | DWORD n = GetModuleFileNameA(NULL, buff, nsize); /* get exec. name */ | ||
574 | if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) | ||
575 | luaL_error(L, "unable to get ModuleFileName"); | ||
576 | else { | ||
577 | *lb = '\0'; /* cut name on the last '\\' to get the path */ | ||
578 | luaL_gsub(L, lua_tostring(L, -1), LUA_EXEC_DIR, buff); | ||
579 | lua_remove(L, -2); /* remove original string */ | ||
580 | } | ||
581 | } | ||
582 | |||
583 | #else | ||
584 | |||
585 | #define setprogdir(L) ((void)0) | ||
586 | |||
587 | #endif | ||
588 | |||
589 | /* | ||
590 | ** Change a path according to corresponding environment variables | ||
591 | */ | ||
592 | static void chgpath (lua_State *L, const char *fieldname, | ||
593 | const char *envname1, | ||
594 | const char *envname2, | ||
595 | int noenv) { | ||
596 | const char *path = getenv(envname1); | ||
597 | lua_getglobal(L, LUA_LOADLIBNAME); /* get 'package' table */ | ||
598 | lua_getfield(L, -1, fieldname); /* get original path */ | ||
599 | if (path == NULL) /* no environment variable? */ | ||
600 | path = getenv(envname2); /* try alternative name */ | ||
601 | if (path == NULL || noenv) /* no environment variable? */ | ||
602 | lua_pushvalue(L, -1); /* use original value */ | ||
603 | else { | ||
604 | const char *def = lua_tostring(L, -1); /* default path */ | ||
605 | /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ | ||
606 | path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP, | ||
607 | LUA_PATH_SEP AUXMARK LUA_PATH_SEP); | ||
608 | luaL_gsub(L, path, AUXMARK, def); | ||
609 | lua_remove(L, -2); /* remove result from 1st 'gsub' */ | ||
610 | } | ||
611 | setprogdir(L); | ||
612 | lua_setfield(L, -3, fieldname); /* set path value */ | ||
613 | lua_pop(L, 2); /* pop 'package' table and original path */ | ||
614 | } | ||
615 | |||
616 | /* }================================================================== */ | ||
617 | |||
618 | |||
619 | static int handle_luainit (lua_State *L) { | 535 | static int handle_luainit (lua_State *L) { |
620 | const char *name = "=" LUA_INITVARVERSION; | 536 | const char *name = "=" LUA_INITVARVERSION; |
621 | const char *init = getenv(name + 1); | 537 | const char *init = getenv(name + 1); |
@@ -648,10 +564,11 @@ static int pmain (lua_State *L) { | |||
648 | } | 564 | } |
649 | if (args & has_v) /* option '-v'? */ | 565 | if (args & has_v) /* option '-v'? */ |
650 | print_version(); | 566 | print_version(); |
567 | if (args & has_E) { /* option '-E'? */ | ||
568 | lua_pushboolean(L, 1); /* signal for libraries to ignore env. vars. */ | ||
569 | lua_setfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); | ||
570 | } | ||
651 | luaL_openlibs(L); /* open standard libraries */ | 571 | luaL_openlibs(L); /* open standard libraries */ |
652 | /* change paths according to env variables */ | ||
653 | chgpath(L, "path", LUA_PATHVARVERSION, LUA_PATH_VAR, (args & has_E)); | ||
654 | chgpath(L, "cpath", LUA_CPATHVARVERSION, LUA_CPATH_VAR, (args & has_E)); | ||
655 | createargtable(L, argv, argc, script); /* create table 'arg' */ | 572 | createargtable(L, argv, argc, script); /* create table 'arg' */ |
656 | if (!(args & has_E)) { /* no option '-E'? */ | 573 | if (!(args & has_E)) { /* no option '-E'? */ |
657 | if (handle_luainit(L) != LUA_OK) /* run LUA_INIT */ | 574 | if (handle_luainit(L) != LUA_OK) /* run LUA_INIT */ |