LJ_NOINLINE char *LJ_FASTCALL lj_buf_more2(SBuf *sb, MSize sz) { MSize len = sbuflen(sb); lua_assert(sz > sbufleft(sb)); if (LJ_UNLIKELY(sz > LJ_MAX_MEM || len + sz > LJ_MAX_MEM)) lj_err_mem(sbufL(sb)); buf_grow(sb, len + sz); return sbufP(sb); }
void LJ_FASTCALL lj_buf_shrink(lua_State *L, SBuf *sb) { char *b = sbufB(sb); MSize osz = (MSize)(sbufE(sb) - b); if (osz > 2*LJ_MIN_SBUF) { MSize n = (MSize)(sbufP(sb) - b); b = lj_mem_realloc(L, b, osz, (osz >> 1)); setmref(sb->b, b); setmref(sb->p, b + n); setmref(sb->e, b + (osz >> 1)); }
char *kp_buf_more(SBuf *sb, int sz) { char *b; int old_len = sbuflen(sb); if (sz > sbufleft(sb)) { b = realloc(sbufB(sb), sbuflen(sb) * 2); sb->b = b; sb->p = b + old_len; sb->e = b + old_len * 2; } return sbufP(sb); }