diff options
Diffstat (limited to '')
| -rw-r--r-- | lbaselib.c | 15 |
1 files changed, 13 insertions, 2 deletions
| @@ -337,9 +337,20 @@ static int load_aux (lua_State *L, int status, int envidx) { | |||
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | 339 | ||
| 340 | static const char *getmode (lua_State *L, int idx) { | ||
| 341 | const char *mode = luaL_optstring(L, idx, "bt"); | ||
| 342 | int i = 0; | ||
| 343 | if (mode[i] == 'b') i++; | ||
| 344 | if (mode[i] == 't') i++; | ||
| 345 | if (mode[i] != '\0') | ||
| 346 | luaL_argerror(L, idx, "invalid mode"); | ||
| 347 | return mode; | ||
| 348 | } | ||
| 349 | |||
| 350 | |||
| 340 | static int luaB_loadfile (lua_State *L) { | 351 | static int luaB_loadfile (lua_State *L) { |
| 341 | const char *fname = luaL_optstring(L, 1, NULL); | 352 | const char *fname = luaL_optstring(L, 1, NULL); |
| 342 | const char *mode = luaL_optstring(L, 2, NULL); | 353 | const char *mode = getmode(L, 2); |
| 343 | int env = (!lua_isnone(L, 3) ? 3 : 0); /* 'env' index or 0 if no 'env' */ | 354 | int env = (!lua_isnone(L, 3) ? 3 : 0); /* 'env' index or 0 if no 'env' */ |
| 344 | int status = luaL_loadfilex(L, fname, mode); | 355 | int status = luaL_loadfilex(L, fname, mode); |
| 345 | return load_aux(L, status, env); | 356 | return load_aux(L, status, env); |
| @@ -388,7 +399,7 @@ static int luaB_load (lua_State *L) { | |||
| 388 | int status; | 399 | int status; |
| 389 | size_t l; | 400 | size_t l; |
| 390 | const char *s = lua_tolstring(L, 1, &l); | 401 | const char *s = lua_tolstring(L, 1, &l); |
| 391 | const char *mode = luaL_optstring(L, 3, "bt"); | 402 | const char *mode = getmode(L, 3); |
| 392 | int env = (!lua_isnone(L, 4) ? 4 : 0); /* 'env' index or 0 if no 'env' */ | 403 | int env = (!lua_isnone(L, 4) ? 4 : 0); /* 'env' index or 0 if no 'env' */ |
| 393 | if (s != NULL) { /* loading a string? */ | 404 | if (s != NULL) { /* loading a string? */ |
| 394 | const char *chunkname = luaL_optstring(L, 2, s); | 405 | const char *chunkname = luaL_optstring(L, 2, s); |
