diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-11-04 22:10:15 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-11-04 22:10:15 -0800 |
commit | ce6ada3b340607177bec7cbfa2b5eaa47ebb07a4 (patch) | |
tree | 11808552fdee0ba62ba5555f2a1a6df280872aba /buf.c | |
parent | 44c8e70f810ad52b0f26f06147d5613ed1271900 (diff) | |
download | txr-ce6ada3b340607177bec7cbfa2b5eaa47ebb07a4.tar.gz txr-ce6ada3b340607177bec7cbfa2b5eaa47ebb07a4.tar.bz2 txr-ce6ada3b340607177bec7cbfa2b5eaa47ebb07a4.zip |
buffers: implement copy-buf.
* buf.c (copy_buf): New function.
(buf_init): Register copy-buf intrinsic.
* buf.h (copy_buf): Declared.
* lib.c (copy): Handle BUF via copy_buf.
* txr.1: Documented.
Diffstat (limited to 'buf.c')
-rw-r--r-- | buf.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -137,6 +137,14 @@ static struct buf *buf_handle(val buf, val ctx) ctx, buf, nao); } +val copy_buf(val buf) +{ + struct buf *b = buf_handle(buf, lit("copy-buf")); + return if3(b->size, + make_duplicate_buf(b->len, b->data), + make_borrowed_buf(b->len, b->data)); +} + static void buf_grow(struct buf *b, val init_val, val self) { cnum len = c_num(b->len); @@ -935,6 +943,7 @@ void buf_init(void) reg_fun(intern(lit("buf-trim"), user_package), func_n1(buf_trim)); reg_fun(intern(lit("buf-set-length"), user_package), func_n3o(buf_set_length, 2)); reg_fun(intern(lit("length-buf"), user_package), func_n1(length_buf)); + reg_fun(intern(lit("copy-buf"), user_package), func_n1(copy_buf)); #if HAVE_I8 reg_fun(intern(lit("buf-put-i8"), user_package), func_n3(buf_put_i8)); |