diff options
author | Mike Pall <mike> | 2013-02-27 17:11:31 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2013-02-27 17:29:35 +0100 |
commit | 28cfcf77445e144335961a020e3e08d84cf0091f (patch) | |
tree | 1a769d0ee0fab26a79073a118ba4f9e1557b081a /src/lj_buf.c | |
parent | d44337a566bb3de06a6ac4ecf2d2a77767b86029 (diff) | |
download | luajit-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.c | 40 |
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 | |||
16 | LJ_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 | |||
27 | char *lj_buf_tmp(lua_State *L, MSize sz) | ||
28 | { | ||
29 | return lj_buf_need(L, &G(L)->tmpbuf, sz); | ||
30 | } | ||
31 | |||
32 | void 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 | |||