aboutsummaryrefslogtreecommitdiff
path: root/ldo.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldo.c')
-rw-r--r--ldo.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/ldo.c b/ldo.c
index a3752042..46d53d57 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.c,v 1.103 2000/10/05 13:00:17 roberto Exp roberto $ 2** $Id: ldo.c,v 1.104 2000/10/06 12:45:25 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*/
@@ -260,14 +260,16 @@ static int protectedparser (lua_State *L, ZIO *z, int bin) {
260 260
261static int parse_file (lua_State *L, const char *filename) { 261static int parse_file (lua_State *L, const char *filename) {
262 ZIO z; 262 ZIO z;
263 char source[MAXFILENAME];
264 int status; 263 int status;
265 int bin; /* flag for file mode */ 264 int bin; /* flag for file mode */
266 int c; /* look ahead char */ 265 int c; /* look ahead char */
267 FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); 266 FILE *f = (filename == NULL) ? stdin : fopen(filename, "r");
268 if (f == NULL) return LUA_ERRFILE; /* unable to open file */ 267 if (f == NULL) return LUA_ERRFILE; /* unable to open file */
269 if (filename == NULL) filename = "(stdin)"; 268 lua_pushstring(L, "@");
270 sprintf(source, "@%.*s", (int)sizeof(source)-2, filename); 269 lua_pushstring(L, (filename == NULL) ? "(stdin)" : filename);
270 lua_concat(L, 2);
271 filename = lua_tostring(L, -1); /* filename = '@'..filename */
272 lua_pop(L, 1); /* OK: there is no GC during parser */
271 c = fgetc(f); 273 c = fgetc(f);
272 ungetc(c, f); 274 ungetc(c, f);
273 bin = (c == ID_CHUNK); 275 bin = (c == ID_CHUNK);
@@ -275,7 +277,7 @@ static int parse_file (lua_State *L, const char *filename) {
275 f = freopen(filename, "rb", f); /* set binary mode */ 277 f = freopen(filename, "rb", f); /* set binary mode */
276 if (f == NULL) return LUA_ERRFILE; /* unable to reopen file */ 278 if (f == NULL) return LUA_ERRFILE; /* unable to reopen file */
277 } 279 }
278 luaZ_Fopen(&z, f, source); 280 luaZ_Fopen(&z, f, filename);
279 status = protectedparser(L, &z, bin); 281 status = protectedparser(L, &z, bin);
280 if (f != stdin) 282 if (f != stdin)
281 fclose(f); 283 fclose(f);