diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-01-11 14:10:47 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-01-11 14:10:47 -0200 |
| commit | a541ada194634c72be5d174159b86ab2aa17a5c3 (patch) | |
| tree | 7ef90249f02eddd9a6abd2b8a85cce1a33856285 | |
| parent | 55d31383972aa29fff438973f91f88f372509281 (diff) | |
| download | lua-a541ada194634c72be5d174159b86ab2aa17a5c3.tar.gz lua-a541ada194634c72be5d174159b86ab2aa17a5c3.tar.bz2 lua-a541ada194634c72be5d174159b86ab2aa17a5c3.zip | |
"-"-trick in C packages now accept name-v13...
| -rw-r--r-- | loadlib.c | 21 |
1 files changed, 14 insertions, 7 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: loadlib.c,v 1.72 2010/01/04 16:36:39 roberto Exp roberto $ | 2 | ** $Id: loadlib.c,v 1.73 2010/01/06 14:35:17 roberto Exp roberto $ |
| 3 | ** Dynamic library loader for Lua | 3 | ** Dynamic library loader for Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | ** | 5 | ** |
| @@ -449,13 +449,20 @@ static int loader_Lua (lua_State *L) { | |||
| 449 | } | 449 | } |
| 450 | 450 | ||
| 451 | 451 | ||
| 452 | static int loadfunc(lua_State *L, const char *filename, const char *modname) { | 452 | static int loadfunc (lua_State *L, const char *filename, const char *modname) { |
| 453 | const char *funcname; | 453 | const char *funcname; |
| 454 | const char *mark = strchr(modname, *LUA_IGMARK); | 454 | const char *mark; |
| 455 | if (mark) modname = mark + 1; | 455 | modname = luaL_gsub(L, modname, ".", LUA_OFSEP); |
| 456 | funcname = luaL_gsub(L, modname, ".", LUA_OFSEP); | 456 | mark = strchr(modname, *LUA_IGMARK); |
| 457 | funcname = lua_pushfstring(L, POF"%s", funcname); | 457 | if (mark) { |
| 458 | lua_remove(L, -2); /* remove 'gsub' result */ | 458 | int stat; |
| 459 | funcname = lua_pushlstring(L, modname, mark - modname); | ||
| 460 | funcname = lua_pushfstring(L, POF"%s", funcname); | ||
| 461 | stat = ll_loadfunc(L, filename, funcname); | ||
| 462 | if (stat != ERRFUNC) return stat; | ||
| 463 | modname = mark + 1; /* else go ahead and try old-style name */ | ||
| 464 | } | ||
| 465 | funcname = lua_pushfstring(L, POF"%s", modname); | ||
| 459 | return ll_loadfunc(L, filename, funcname); | 466 | return ll_loadfunc(L, filename, funcname); |
| 460 | } | 467 | } |
| 461 | 468 | ||
