aboutsummaryrefslogtreecommitdiff
path: root/src/lib_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib_buffer.c')
-rw-r--r--src/lib_buffer.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/src/lib_buffer.c b/src/lib_buffer.c
index e21362b8..c9ef9510 100644
--- a/src/lib_buffer.c
+++ b/src/lib_buffer.c
@@ -22,15 +22,13 @@
22 22
23#define LJLIB_MODULE_buffer 23#define LJLIB_MODULE_buffer
24 24
25/* Note: this uses interim structs until the SBuf reorg. */
26
27LJLIB_CF(buffer_encode) 25LJLIB_CF(buffer_encode)
28{ 26{
29 cTValue *o = lj_lib_checkany(L, 1); 27 cTValue *o = lj_lib_checkany(L, 1);
30 StrBuf sbuf; 28 SBufExt sbx;
31 sbuf.sb = lj_buf_tmp_(L); 29 lj_bufx_init_borrow(L, &sbx, &G(L)->tmpbuf);
32 lj_serialize_put(&sbuf, o); 30 lj_serialize_put(&sbx, o);
33 setstrV(L, L->top++, lj_buf_str(L, sbuf.sb)); 31 setstrV(L, L->top++, lj_buf_str(L, (SBuf *)&sbx));
34 lj_gc_check(L); 32 lj_gc_check(L);
35 return 1; 33 return 1;
36} 34}
@@ -38,16 +36,11 @@ LJLIB_CF(buffer_encode)
38LJLIB_CF(buffer_decode) 36LJLIB_CF(buffer_decode)
39{ 37{
40 GCstr *str = lj_lib_checkstr(L, 1); 38 GCstr *str = lj_lib_checkstr(L, 1);
41 char *p = (char *)strdata(str); 39 SBufExt sbx;
42 SBuf sb; 40 lj_bufx_init_cow(L, &sbx, strdata(str), str->len);
43 StrBuf sbuf; 41 /* No need to set sbx.cowref here. */
44 setsbufL(&sb, L);
45 sb.b = p;
46 sb.w = sb.e = p + str->len;
47 sbuf.sb = &sb;
48 sbuf.r = p;
49 setnilV(L->top++); 42 setnilV(L->top++);
50 lj_serialize_get(&sbuf, L->top-1); 43 lj_serialize_get(&sbx, L->top-1);
51 lj_gc_check(L); 44 lj_gc_check(L);
52 return 1; 45 return 1;
53} 46}