diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib_buffer.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib_buffer.c b/src/lib_buffer.c index 9aa725b6..e3d24504 100644 --- a/src/lib_buffer.c +++ b/src/lib_buffer.c | |||
| @@ -76,6 +76,8 @@ LJLIB_CF(buffer_method_skip) LJLIB_REC(.) | |||
| 76 | MSize len = sbufxlen(sbx); | 76 | MSize len = sbufxlen(sbx); |
| 77 | if (n < len) { | 77 | if (n < len) { |
| 78 | sbx->r += n; | 78 | sbx->r += n; |
| 79 | } else if (sbufiscow(sbx)) { | ||
| 80 | sbx->r = sbx->w; | ||
| 79 | } else { | 81 | } else { |
| 80 | sbx->r = sbx->w = sbx->b; | 82 | sbx->r = sbx->w = sbx->b; |
| 81 | } | 83 | } |
| @@ -173,7 +175,7 @@ LJLIB_CF(buffer_method_get) LJLIB_REC(.) | |||
| 173 | setstrV(L, o, lj_str_new(L, sbx->r, n)); | 175 | setstrV(L, o, lj_str_new(L, sbx->r, n)); |
| 174 | sbx->r += n; | 176 | sbx->r += n; |
| 175 | } | 177 | } |
| 176 | if (sbx->r == sbx->w) sbx->r = sbx->w = sbx->b; | 178 | if (sbx->r == sbx->w && !sbufiscow(sbx)) sbx->r = sbx->w = sbx->b; |
| 177 | lj_gc_check(L); | 179 | lj_gc_check(L); |
| 178 | return narg-1; | 180 | return narg-1; |
| 179 | } | 181 | } |
