about summary refs log tree commit diff
path: root/src/rt/rust_upcall.cpp
diff options
context:
space:
mode:
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);