diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R
index a5783eb3aaa5604a17734b19b1245e4508904209..35437998a38d75cef15151c61d01940c5f2ffd00 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R
@@ -2,7 +2,7 @@
 	library.dynam.unload("testrffi", libpath)
 
 rffi.dotCModifiedArguments <- function(data) {
-	.C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data))
+	.C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data), as.character(data))
 }
 
 rffi.addInt <- function(a, b) {
diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c
index e47d7a69e84048e9d039650065a9f73cc58245cf..d2179c3af541553dfce520484500608f235240e6 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c
@@ -26,7 +26,7 @@
 #include "testrffi.h"
 
 static const R_CMethodDef CEntries[]  = {
-    {"dotCModifiedArguments", (DL_FUNC) &dotCModifiedArguments, 4},
+    {"dotCModifiedArguments", (DL_FUNC) &dotCModifiedArguments, 5},
     {NULL, NULL, 0}
 };
 
diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c
index 0721954ee062797dd9665fab25cda0c47c66f54d..3c02ded7195d2bdfc1afe4d02c350bab16112755 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c
@@ -30,7 +30,7 @@
 #include <Rinterface.h>
 #include "testrffi.h"
 
-void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata) {
+void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata, char** cdata) {
     for (int i = 0; i < len[0]; i++) {
 	idata[i] ++;
     }
@@ -38,7 +38,13 @@ void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata) {
 	rdata[i] *= 0.2;
     }
     for (int i = 0; i < len[0]; i++) {
-	ldata[i] = ldata[i] == 0 ? 1 : 0;
+    ldata[i] = ldata[i] == 0 ? 1 : 0;
+    }
+    for (int i = 0; i < len[0]; i++) {
+        for (int j = 0; cdata[i][j] != 0; j++) {
+            char c = cdata[i][j];
+            cdata[i][j] = (c >= '0' && c <= '9') ? c - '0' + 'a' : 'r';
+        }
     }
 }
 
diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h
index 3570fbd380e33f17ff192da16728702fa01536a0..3228612efb4e332b1a7a53ebc6e3d2037d8b2f52 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h
@@ -20,7 +20,7 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-extern void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata);
+extern void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata, char** cdata);
 
 extern SEXP addInt(SEXP a, SEXP b);