diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-04-15 14:32:47 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-04-15 14:32:47 -0300 |
commit | 209602ac31512c9f201d11edca6fe7aa368b85a4 (patch) | |
tree | 878c569fdbae1e867ed420da8d0e2e54e7fe4c98 | |
parent | 6251d889ca96dc9c3219f5908b706cd4ca053259 (diff) | |
download | lua-209602ac31512c9f201d11edca6fe7aa368b85a4.tar.gz lua-209602ac31512c9f201d11edca6fe7aa368b85a4.tar.bz2 lua-209602ac31512c9f201d11edca6fe7aa368b85a4.zip |
BUG: input file must be closed just after parser.
-rw-r--r-- | inout.c | 11 | ||||
-rw-r--r-- | opcode.c | 24 |
2 files changed, 15 insertions, 20 deletions
@@ -5,7 +5,7 @@ | |||
5 | ** Also provides some predefined lua functions. | 5 | ** Also provides some predefined lua functions. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | char *rcs_inout="$Id: inout.c,v 2.56 1997/04/06 14:08:08 roberto Exp roberto $"; | 8 | char *rcs_inout="$Id: inout.c,v 2.57 1997/04/06 14:14:27 roberto Exp roberto $"; |
9 | 9 | ||
10 | #include <stdio.h> | 10 | #include <stdio.h> |
11 | #include <string.h> | 11 | #include <string.h> |
@@ -68,8 +68,6 @@ FILE *lua_openfile (char *fn) | |||
68 | } | 68 | } |
69 | else | 69 | else |
70 | fp = fopen (fn, "r"); | 70 | fp = fopen (fn, "r"); |
71 | if (fp == NULL) | ||
72 | return NULL; | ||
73 | lua_parsedfile = luaI_createfixedstring(fn)->str; | 71 | lua_parsedfile = luaI_createfixedstring(fn)->str; |
74 | return fp; | 72 | return fp; |
75 | } | 73 | } |
@@ -79,11 +77,8 @@ FILE *lua_openfile (char *fn) | |||
79 | */ | 77 | */ |
80 | void lua_closefile (void) | 78 | void lua_closefile (void) |
81 | { | 79 | { |
82 | if (fp != NULL && fp != stdin) | 80 | if (fp != stdin) |
83 | { | 81 | fclose(fp); |
84 | fclose (fp); | ||
85 | fp = NULL; | ||
86 | } | ||
87 | } | 82 | } |
88 | 83 | ||
89 | /* | 84 | /* |
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_opcode="$Id: opcode.c,v 4.1 1997/04/03 18:27:06 roberto Exp roberto $"; | 6 | char *rcs_opcode="$Id: opcode.c,v 4.2 1997/04/04 22:24:51 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <setjmp.h> | 8 | #include <setjmp.h> |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
@@ -554,7 +554,7 @@ int luaI_dorun (TFunc *tf) | |||
554 | return status; | 554 | return status; |
555 | } | 555 | } |
556 | 556 | ||
557 | static int do_protectedmain (void) | 557 | static int do_protectedmain (lua_CFunction closef) |
558 | { | 558 | { |
559 | TFunc tf; | 559 | TFunc tf; |
560 | int status; | 560 | int status; |
@@ -563,16 +563,17 @@ static int do_protectedmain (void) | |||
563 | errorJmp = &myErrorJmp; | 563 | errorJmp = &myErrorJmp; |
564 | luaI_initTFunc(&tf); | 564 | luaI_initTFunc(&tf); |
565 | tf.fileName = lua_parsedfile; | 565 | tf.fileName = lua_parsedfile; |
566 | if (setjmp(myErrorJmp) == 0) | 566 | if (setjmp(myErrorJmp) == 0) { |
567 | { | ||
568 | lua_parse(&tf); | 567 | lua_parse(&tf); |
569 | status = luaI_dorun(&tf); | 568 | status = 0; |
570 | } | 569 | } |
571 | else | 570 | else { |
572 | { | ||
573 | status = 1; | ||
574 | adjustC(0); /* erase extra slot */ | 571 | adjustC(0); /* erase extra slot */ |
572 | status = 1; | ||
575 | } | 573 | } |
574 | closef(); | ||
575 | if (status == 0) | ||
576 | status = luaI_dorun(&tf); | ||
576 | errorJmp = oldErr; | 577 | errorJmp = oldErr; |
577 | luaI_free(tf.code); | 578 | luaI_free(tf.code); |
578 | return status; | 579 | return status; |
@@ -620,13 +621,13 @@ int lua_dofile (char *filename) | |||
620 | if (c == ID_CHUNK) { | 621 | if (c == ID_CHUNK) { |
621 | f = freopen(filename, "rb", f); /* set binary mode */ | 622 | f = freopen(filename, "rb", f); /* set binary mode */ |
622 | status = luaI_undump(f); | 623 | status = luaI_undump(f); |
624 | lua_closefile(); | ||
623 | } | 625 | } |
624 | else { | 626 | else { |
625 | if (c == '#') | 627 | if (c == '#') |
626 | while ((c=fgetc(f)) != '\n') /* skip first line */; | 628 | while ((c=fgetc(f)) != '\n') /* skip first line */; |
627 | status = do_protectedmain(); | 629 | status = do_protectedmain(lua_closefile); |
628 | } | 630 | } |
629 | lua_closefile(); | ||
630 | return status; | 631 | return status; |
631 | } | 632 | } |
632 | 633 | ||
@@ -640,8 +641,7 @@ int lua_dostring (char *str) | |||
640 | if (str == NULL) | 641 | if (str == NULL) |
641 | return 1; | 642 | return 1; |
642 | lua_openstring(str); | 643 | lua_openstring(str); |
643 | status = do_protectedmain(); | 644 | status = do_protectedmain(lua_closestring); |
644 | lua_closestring(); | ||
645 | return status; | 645 | return status; |
646 | } | 646 | } |
647 | 647 | ||