about summary refs log tree commit diff
path: root/src/rt/rust_upcall.cpp
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-06-20 13:46:44 -0700
committerEric Holk <eholk@mozilla.com>2011-06-20 13:47:02 -0700
commita2dcd08cc273bcc880fc9687bffc98796fa1f3c4 (patch)
treef794a78f7e6723995ed983e779ee9cbbbd896ad4 /src/rt/rust_upcall.cpp
parentc0515017842a4b7872ff31bd91acec4a54d2ef2d (diff)
downloadrust-a2dcd08cc273bcc880fc9687bffc98796fa1f3c4.tar.gz
rust-a2dcd08cc273bcc880fc9687bffc98796fa1f3c4.zip
Added string duplication to deep_copy. Closes #520.
Diffstat (limited to 'src/rt/rust_upcall.cpp')
-rw-r--r--src/rt/rust_upcall.cpp18
1 files changed, 15 insertions, 3 deletions
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);