From keithf at amnis.com  Thu May 12 00:01:06 2005
From: keithf at amnis.com (keithf@amnis.com)
Date: Thu May 12 00:01:14 2005
Subject: [Rd] Patch to address (PR#7853)  -- tested briefly, seems to work
Message-ID: <20050511220106.BF734E186@slim.kubism.ku.dk>

--- dotcode.c    2004-09-05 02:31:57.000000000 -0700
+++ /usr/local/src/R-2.0.0/src/main/dotcode.c    2005-05-11 
12:24:11.000000000 -0700
@@ -190,6 +190,7 @@
 static void *RObjToCPtr(SEXP s, int naok, int dup, int narg, int Fort, 
const char *name, R_toCConverter **converter,
                           int targetType)
 {
+    unsigned char *rawptr;
     int *iptr;
     float *sptr;
     double *rptr;
@@ -228,6 +229,16 @@
     }
 
     switch(TYPEOF(s)) {
+    case RAWSXP:
+    n = LENGTH(s);
+    rawptr = RAW(s);
+    if (dup) {
+        rawptr = (unsigned char *) R_alloc(n, sizeof(unsigned char));
+        for (i = 0; i < n; i++)
+            rawptr[i] = RAW(s)[i];
+    }
+    return (void *) rawptr;
+    break;
     case LGLSXP:
     case INTSXP:
     n = LENGTH(s);
@@ -329,6 +340,7 @@
 
 static SEXP CPtrToRObj(void *p, SEXP arg, int Fort, 
R_NativePrimitiveArgType type)
 {
+    unsigned char *rawptr;
     int *iptr, n=length(arg);
     float *sptr;
     double *rptr;
@@ -339,6 +351,12 @@
     SEXP s, t;
 
     switch(type) {
+    case RAWSXP:
+    s = allocVector(type, n);
+    rawptr = (unsigned char *)p;
+    for (i = 0; i < n; i++)
+        RAW(s)[i] = rawptr[i];
+    break;
     case LGLSXP:
     case INTSXP:
     s = allocVector(type, n);


[Rd] Patch to address (PR#7853) -- tested briefly, seems to work
keithf@amnis.com