diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-10-10 17:51:39 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-10-10 17:51:39 -0200 |
| commit | 2bddbe660321547e606022f9c82e9511e54d5df6 (patch) | |
| tree | 1c6e09ff3c6e37d64b68615ccffb560343ada43e | |
| parent | e323338fd09216069d1290ec099ac987aadb036b (diff) | |
| download | lua-2bddbe660321547e606022f9c82e9511e54d5df6.tar.gz lua-2bddbe660321547e606022f9c82e9511e54d5df6.tar.bz2 lua-2bddbe660321547e606022f9c82e9511e54d5df6.zip | |
cannot change `filename' before eventual call to `freopen'
| -rw-r--r-- | ldo.c | 12 |
1 files changed, 6 insertions, 6 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldo.c,v 1.105 2000/10/09 13:47:32 roberto Exp roberto $ | 2 | ** $Id: ldo.c,v 1.106 2000/10/09 15:46:43 roberto Exp roberto $ |
| 3 | ** Stack and Call structure of Lua | 3 | ** Stack and Call structure of Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -264,11 +264,6 @@ static int parse_file (lua_State *L, const char *filename) { | |||
| 264 | int c; /* look ahead char */ | 264 | int c; /* look ahead char */ |
| 265 | FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); | 265 | FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); |
| 266 | if (f == NULL) return LUA_ERRFILE; /* unable to open file */ | 266 | if (f == NULL) return LUA_ERRFILE; /* unable to open file */ |
| 267 | lua_pushstring(L, "@"); | ||
| 268 | lua_pushstring(L, (filename == NULL) ? "(stdin)" : filename); | ||
| 269 | lua_concat(L, 2); | ||
| 270 | filename = lua_tostring(L, -1); /* filename = '@'..filename */ | ||
| 271 | lua_pop(L, 1); /* OK: there is no GC during parser */ | ||
| 272 | c = fgetc(f); | 267 | c = fgetc(f); |
| 273 | ungetc(c, f); | 268 | ungetc(c, f); |
| 274 | bin = (c == ID_CHUNK); | 269 | bin = (c == ID_CHUNK); |
| @@ -276,6 +271,11 @@ static int parse_file (lua_State *L, const char *filename) { | |||
| 276 | f = freopen(filename, "rb", f); /* set binary mode */ | 271 | f = freopen(filename, "rb", f); /* set binary mode */ |
| 277 | if (f == NULL) return LUA_ERRFILE; /* unable to reopen file */ | 272 | if (f == NULL) return LUA_ERRFILE; /* unable to reopen file */ |
| 278 | } | 273 | } |
| 274 | lua_pushstring(L, "@"); | ||
| 275 | lua_pushstring(L, (filename == NULL) ? "(stdin)" : filename); | ||
| 276 | lua_concat(L, 2); | ||
| 277 | filename = lua_tostring(L, -1); /* filename = '@'..filename */ | ||
| 278 | lua_pop(L, 1); /* OK: there is no GC during parser */ | ||
| 279 | luaZ_Fopen(&z, f, filename); | 279 | luaZ_Fopen(&z, f, filename); |
| 280 | status = protectedparser(L, &z, bin); | 280 | status = protectedparser(L, &z, bin); |
| 281 | if (f != stdin) | 281 | if (f != stdin) |
