diff options
Diffstat (limited to 'src/lj_bcread.c')
-rw-r--r-- | src/lj_bcread.c | 21 |
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; |