summaryrefslogtreecommitdiff
path: root/src/lj_buf.c
diff options
context:
space:
mode:
authorMike Pall <mike>2013-02-27 17:11:31 +0100
committerMike Pall <mike>2013-02-27 17:29:35 +0100
commit28cfcf77445e144335961a020e3e08d84cf0091f (patch)
tree1a769d0ee0fab26a79073a118ba4f9e1557b081a /src/lj_buf.c
parentd44337a566bb3de06a6ac4ecf2d2a77767b86029 (diff)
downloadluajit-28cfcf77445e144335961a020e3e08d84cf0091f.tar.gz
luajit-28cfcf77445e144335961a020e3e08d84cf0091f.tar.bz2
luajit-28cfcf77445e144335961a020e3e08d84cf0091f.zip
String buffer refactoring, part 1.
Move string buffer handling to lj_buf.*. Use common buffer resizing function.
Diffstat (limited to 'src/lj_buf.c')
-rw-r--r--src/lj_buf.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/lj_buf.c b/src/lj_buf.c
new file mode 100644
index 00000000..5d901d2a
--- /dev/null
+++ b/src/lj_buf.c
@@ -0,0 +1,40 @@
1/*
2** Buffer handling.
3** Copyright (C) 2005-2013 Mike Pall. See Copyright Notice in luajit.h
4*/
5
6#include <stdio.h>
7
8#define lj_buf_c
9#define LUA_CORE
10
11#include "lj_obj.h"
12#include "lj_gc.h"
13#include "lj_err.h"
14#include "lj_buf.h"
15
16LJ_NOINLINE void lj_buf_grow(lua_State *L, SBuf *sb, MSize sz)
17{
18 MSize bsz = sb->sz * 2;
19 if (LJ_UNLIKELY(sz > LJ_MAX_MEM))
20 lj_err_mem(L);
21 if (bsz < LJ_MIN_SBUF) bsz = LJ_MIN_SBUF;
22 while (bsz < sz) bsz += bsz;
23 sb->buf = lj_mem_realloc(L, sb->buf, sb->sz, bsz);
24 sb->sz = bsz;
25}
26
27char *lj_buf_tmp(lua_State *L, MSize sz)
28{
29 return lj_buf_need(L, &G(L)->tmpbuf, sz);
30}
31
32void lj_buf_shrink(lua_State *L, SBuf *sb)
33{
34 MSize sz = sb->sz;
35 if (sz > 2*LJ_MIN_SBUF) {
36 sb->buf = lj_mem_realloc(L, sb->buf, sz, (sz >> 1));
37 sb->sz = (sz >> 1);
38 }
39}
40