From a2dcd08cc273bcc880fc9687bffc98796fa1f3c4 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Mon, 20 Jun 2011 13:46:44 -0700 Subject: Added string duplication to deep_copy. Closes #520. --- src/rt/rust_upcall.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/rt/rust_upcall.cpp') diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 1a0d4f8c0b0..7fb6bc4c84d 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -315,9 +315,7 @@ upcall_mark(rust_task *task, void* ptr) { return 0; } -extern "C" CDECL rust_str * -upcall_new_str(rust_task *task, char const *s, size_t fill) { - LOG_UPCALL_ENTRY(task); +rust_str *make_str(rust_task *task, char const *s, size_t fill) { rust_dom *dom = task->dom; size_t alloc = next_power_of_two(sizeof(rust_str) + fill); void *mem = task->malloc(alloc); @@ -332,6 +330,20 @@ upcall_new_str(rust_task *task, char const *s, size_t fill) { return st; } +extern "C" CDECL rust_str * +upcall_new_str(rust_task *task, char const *s, size_t fill) { + LOG_UPCALL_ENTRY(task); + + return make_str(task, s, fill); +} + +extern "C" CDECL rust_str * +upcall_dup_str(rust_task *task, rust_str *str) { + LOG_UPCALL_ENTRY(task); + + return make_str(task, (char const *)str->data, str->fill); +} + extern "C" CDECL rust_vec * upcall_new_vec(rust_task *task, size_t fill, type_desc *td) { LOG_UPCALL_ENTRY(task); -- cgit 1.4.1-3-g733a5