diff options
author | Mike Pall <mike> | 2013-03-03 21:18:22 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2013-03-03 21:18:22 +0100 |
commit | dac2825e9d626d910fc2657d1d9b68d225f18b57 (patch) | |
tree | 3b4ea78d5a8b887dd910eafc93fba3810ad00430 /src | |
parent | 78c97bc5a1529b0e21d417011ddb956c08a4643e (diff) | |
download | luajit-dac2825e9d626d910fc2657d1d9b68d225f18b57.tar.gz luajit-dac2825e9d626d910fc2657d1d9b68d225f18b57.tar.bz2 luajit-dac2825e9d626d910fc2657d1d9b68d225f18b57.zip |
Add missing GC steps for io.* functions.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib_io.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lib_io.c b/src/lib_io.c index 8858683f..e0c6908f 100644 --- a/src/lib_io.c +++ b/src/lib_io.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include "lualib.h" | 17 | #include "lualib.h" |
18 | 18 | ||
19 | #include "lj_obj.h" | 19 | #include "lj_obj.h" |
20 | #include "lj_gc.h" | ||
20 | #include "lj_err.h" | 21 | #include "lj_err.h" |
21 | #include "lj_str.h" | 22 | #include "lj_str.h" |
22 | #include "lj_state.h" | 23 | #include "lj_state.h" |
@@ -152,6 +153,7 @@ static int io_file_readline(lua_State *L, FILE *fp, MSize chop) | |||
152 | if (n >= m - 64) m += m; | 153 | if (n >= m - 64) m += m; |
153 | } | 154 | } |
154 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); | 155 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); |
156 | lj_gc_check(L); | ||
155 | return (int)ok; | 157 | return (int)ok; |
156 | } | 158 | } |
157 | 159 | ||
@@ -163,6 +165,7 @@ static void io_file_readall(lua_State *L, FILE *fp) | |||
163 | n += (MSize)fread(buf+n, 1, m-n, fp); | 165 | n += (MSize)fread(buf+n, 1, m-n, fp); |
164 | if (n != m) { | 166 | if (n != m) { |
165 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); | 167 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); |
168 | lj_gc_check(L); | ||
166 | return; | 169 | return; |
167 | } | 170 | } |
168 | } | 171 | } |
@@ -174,6 +177,7 @@ static int io_file_readlen(lua_State *L, FILE *fp, MSize m) | |||
174 | char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); | 177 | char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); |
175 | MSize n = (MSize)fread(buf, 1, m, fp); | 178 | MSize n = (MSize)fread(buf, 1, m, fp); |
176 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); | 179 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); |
180 | lj_gc_check(L); | ||
177 | return (n > 0 || m == 0); | 181 | return (n > 0 || m == 0); |
178 | } else { | 182 | } else { |
179 | int c = getc(fp); | 183 | int c = getc(fp); |