Refactor string buffer growth helpers.
This commit is contained in:
36
src/lj_buf.c
36
src/lj_buf.c
@@ -3,8 +3,6 @@
|
||||
** Copyright (C) 2005-2013 Mike Pall. See Copyright Notice in luajit.h
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#define lj_buf_c
|
||||
#define LUA_CORE
|
||||
|
||||
@@ -18,23 +16,37 @@
|
||||
|
||||
/* -- Buffer management --------------------------------------------------- */
|
||||
|
||||
LJ_NOINLINE void LJ_FASTCALL lj_buf_grow(SBuf *sb, char *en)
|
||||
static void buf_grow(SBuf *sb, MSize sz)
|
||||
{
|
||||
lua_State *L = sbufL(sb);
|
||||
char *b = sbufB(sb);
|
||||
MSize sz = (MSize)(en - b);
|
||||
MSize osz = (MSize)(sbufE(sb) - b), nsz = osz;
|
||||
MSize n = (MSize)(sbufP(sb) - b);
|
||||
if (LJ_UNLIKELY(sz > LJ_MAX_MEM))
|
||||
lj_err_mem(L);
|
||||
MSize osz = sbufsz(sb), len = sbuflen(sb), nsz = osz;
|
||||
char *b;
|
||||
if (nsz < LJ_MIN_SBUF) nsz = LJ_MIN_SBUF;
|
||||
while (nsz < sz) nsz += nsz;
|
||||
b = (char *)lj_mem_realloc(L, b, osz, nsz);
|
||||
b = (char *)lj_mem_realloc(sbufL(sb), sbufB(sb), osz, nsz);
|
||||
setmref(sb->b, b);
|
||||
setmref(sb->p, b + n);
|
||||
setmref(sb->p, b + len);
|
||||
setmref(sb->e, b + nsz);
|
||||
}
|
||||
|
||||
LJ_NOINLINE char *LJ_FASTCALL lj_buf_need2(SBuf *sb, MSize sz)
|
||||
{
|
||||
lua_assert(sz > sbufsz(sb));
|
||||
if (LJ_UNLIKELY(sz > LJ_MAX_MEM))
|
||||
lj_err_mem(sbufL(sb));
|
||||
buf_grow(sb, sz);
|
||||
return sbufB(sb);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user