aboutsummaryrefslogtreecommitdiff
path: root/src/lj_bcread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_bcread.c')
-rw-r--r--src/lj_bcread.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/lj_bcread.c b/src/lj_bcread.c
index fabe76da..eda121e0 100644
--- a/src/lj_bcread.c
+++ b/src/lj_bcread.c
@@ -53,27 +53,28 @@ static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need)
53 const char *buf; 53 const char *buf;
54 size_t size; 54 size_t size;
55 if (ls->n) { /* Copy remainder to buffer. */ 55 if (ls->n) { /* Copy remainder to buffer. */
56 if (ls->sb.n) { /* Move down in buffer. */ 56 if (sbuflen(&ls->sb)) { /* Move down in buffer. */
57 lua_assert(ls->p + ls->n == ls->sb.buf + ls->sb.n); 57 lua_assert(ls->p + ls->n == sbufP(&ls->sb));
58 if (ls->n != ls->sb.n) 58 if (ls->n != sbuflen(&ls->sb))
59 memmove(ls->sb.buf, ls->p, ls->n); 59 memmove(sbufB(&ls->sb), ls->p, ls->n);
60 } else { /* Copy from buffer provided by reader. */ 60 } else { /* Copy from buffer provided by reader. */
61 memcpy(lj_buf_need(ls->L, &ls->sb, len), ls->p, ls->n); 61 memcpy(lj_buf_need(ls->L, &ls->sb, len), ls->p, ls->n);
62 } 62 }
63 ls->p = ls->sb.buf; 63 ls->p = sbufB(&ls->sb);
64 } 64 }
65 ls->sb.n = ls->n; 65 setsbufP(&ls->sb, sbufB(&ls->sb) + ls->n);
66 buf = ls->rfunc(ls->L, ls->rdata, &size); /* Get more data from reader. */ 66 buf = ls->rfunc(ls->L, ls->rdata, &size); /* Get more data from reader. */
67 if (buf == NULL || size == 0) { /* EOF? */ 67 if (buf == NULL || size == 0) { /* EOF? */
68 if (need) bcread_error(ls, LJ_ERR_BCBAD); 68 if (need) bcread_error(ls, LJ_ERR_BCBAD);
69 ls->current = -1; /* Only bad if we get called again. */ 69 ls->current = -1; /* Only bad if we get called again. */
70 break; 70 break;
71 } 71 }
72 if (ls->sb.n) { /* Append to buffer. */ 72 if (sbuflen(&ls->sb)) { /* Append to buffer. */
73 MSize n = ls->sb.n + (MSize)size; 73 MSize n = sbuflen(&ls->sb) + (MSize)size;
74 char *p = lj_buf_need(ls->L, &ls->sb, n < len ? len : n); 74 char *p = lj_buf_need(ls->L, &ls->sb, n < len ? len : n);
75 memcpy(p + ls->sb.n, buf, size); 75 memcpy(sbufP(&ls->sb), buf, size);
76 ls->n = ls->sb.n = n; 76 setsbufP(&ls->sb, sbufB(&ls->sb) + n);
77 ls->n = n;
77 ls->p = p; 78 ls->p = p;
78 } else { /* Return buffer provided by reader. */ 79 } else { /* Return buffer provided by reader. */
79 ls->n = (MSize)size; 80 ls->n = (MSize)size;