lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 209602ac31512c9f201d11edca6fe7aa368b85a4
parent 6251d889ca96dc9c3219f5908b706cd4ca053259
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Tue, 15 Apr 1997 14:32:27 -0300

BUG: input file must be closed just after parser.

Diffstat:
Minout.c | 11+++--------
Mopcode.c | 24++++++++++++------------
2 files changed, 15 insertions(+), 20 deletions(-)

diff --git a/inout.c b/inout.c @@ -5,7 +5,7 @@ ** Also provides some predefined lua functions. */ -char *rcs_inout="$Id: inout.c,v 2.56 1997/04/06 14:08:08 roberto Exp roberto $"; +char *rcs_inout="$Id: inout.c,v 2.57 1997/04/06 14:14:27 roberto Exp roberto $"; #include <stdio.h> #include <string.h> @@ -68,8 +68,6 @@ FILE *lua_openfile (char *fn) } else fp = fopen (fn, "r"); - if (fp == NULL) - return NULL; lua_parsedfile = luaI_createfixedstring(fn)->str; return fp; } @@ -79,11 +77,8 @@ FILE *lua_openfile (char *fn) */ void lua_closefile (void) { - if (fp != NULL && fp != stdin) - { - fclose (fp); - fp = NULL; - } + if (fp != stdin) + fclose(fp); } /* diff --git a/opcode.c b/opcode.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_opcode="$Id: opcode.c,v 4.1 1997/04/03 18:27:06 roberto Exp roberto $"; +char *rcs_opcode="$Id: opcode.c,v 4.2 1997/04/04 22:24:51 roberto Exp roberto $"; #include <setjmp.h> #include <stdio.h> @@ -554,7 +554,7 @@ int luaI_dorun (TFunc *tf) return status; } -static int do_protectedmain (void) +static int do_protectedmain (lua_CFunction closef) { TFunc tf; int status; @@ -563,16 +563,17 @@ static int do_protectedmain (void) errorJmp = &myErrorJmp; luaI_initTFunc(&tf); tf.fileName = lua_parsedfile; - if (setjmp(myErrorJmp) == 0) - { + if (setjmp(myErrorJmp) == 0) { lua_parse(&tf); - status = luaI_dorun(&tf); + status = 0; } - else - { - status = 1; + else { adjustC(0); /* erase extra slot */ + status = 1; } + closef(); + if (status == 0) + status = luaI_dorun(&tf); errorJmp = oldErr; luaI_free(tf.code); return status; @@ -620,13 +621,13 @@ int lua_dofile (char *filename) if (c == ID_CHUNK) { f = freopen(filename, "rb", f); /* set binary mode */ status = luaI_undump(f); + lua_closefile(); } else { if (c == '#') while ((c=fgetc(f)) != '\n') /* skip first line */; - status = do_protectedmain(); + status = do_protectedmain(lua_closefile); } - lua_closefile(); return status; } @@ -640,8 +641,7 @@ int lua_dostring (char *str) if (str == NULL) return 1; lua_openstring(str); - status = do_protectedmain(); - lua_closestring(); + status = do_protectedmain(lua_closestring); return status; }