Fix so that it works for 2.6 and 2.5
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10059 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
c5fae8d592
commit
3b9574953c
3 changed files with 20 additions and 5 deletions
|
|
@ -156,11 +156,13 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size)
|
||||||
{
|
{
|
||||||
SEXP t, c;
|
SEXP t, c;
|
||||||
if (!carray) return R_NilValue;
|
if (!carray) return R_NilValue;
|
||||||
|
RVERSION26(return Rf_mkCharEnc(carray, size));
|
||||||
|
RVERSIONPRE26(
|
||||||
PROTECT(t = allocVector(STRSXP, 1));
|
PROTECT(t = allocVector(STRSXP, 1));
|
||||||
c = allocString(size);
|
c = allocString(size);
|
||||||
strncpy(CHAR(c), carray, size);
|
strncpy(CHAR(c), carray, size);
|
||||||
SET_STRING_ELT(t, 0, c);
|
SET_STRING_ELT(t, 0, c);
|
||||||
UNPROTECT(1);
|
UNPROTECT(1);)
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,23 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <Rdefines.h>
|
#include <Rdefines.h>
|
||||||
|
#include <Rversion.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#undef length
|
#undef length
|
||||||
#define SWIGR 1
|
#define SWIGR 1
|
||||||
|
|
||||||
|
#if R_VERSION >= R_Version(2,6,0)
|
||||||
|
#warning "R Swig currently fails on runtime for 2.6 and higher."
|
||||||
|
#warning "Contact maintainer if you would like to help fix"
|
||||||
|
#define VMAXTYPE void *
|
||||||
|
#define RVERSION26(x) x
|
||||||
|
#define RVERSIONPRE26(x)
|
||||||
|
#else
|
||||||
|
#define VMAXTYPE char *
|
||||||
|
#define RVERSION26(x)
|
||||||
|
#define RVERSIONPRE26(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is mainly a way to avoid having lots of local variables that may
|
This is mainly a way to avoid having lots of local variables that may
|
||||||
conflict with those in the routine.
|
conflict with those in the routine.
|
||||||
|
|
|
||||||
|
|
@ -1758,7 +1758,7 @@ int R::functionWrapper(Node *n) {
|
||||||
|
|
||||||
Wrapper_add_local(f, "__r_nprotect", "unsigned int __r_nprotect = 0");
|
Wrapper_add_local(f, "__r_nprotect", "unsigned int __r_nprotect = 0");
|
||||||
Wrapper_add_localv(f, "r_ans", "SEXP", "r_ans = R_NilValue", NIL);
|
Wrapper_add_localv(f, "r_ans", "SEXP", "r_ans = R_NilValue", NIL);
|
||||||
Wrapper_add_localv(f, "r_vmax", "char *", "r_vmax = vmaxget()", NIL);
|
Wrapper_add_localv(f, "r_vmax", "VMAXTYPE", "r_vmax = vmaxget()", NIL);
|
||||||
|
|
||||||
String *sargs = NewString("");
|
String *sargs = NewString("");
|
||||||
|
|
||||||
|
|
@ -2174,7 +2174,7 @@ int R::defineArrayAccessors(SwigType *type) {
|
||||||
String *tmp = NewStringf("%s *ptr", SwigType_lstr(base, 0));
|
String *tmp = NewStringf("%s *ptr", SwigType_lstr(base, 0));
|
||||||
String *tmp1 = NewStringf("%s result", SwigType_lstr(base, 0));
|
String *tmp1 = NewStringf("%s result", SwigType_lstr(base, 0));
|
||||||
|
|
||||||
Wrapper_add_localv(cGetItem, "r_vmax", "char *", "r_vmax = vmaxget()", NIL);
|
Wrapper_add_localv(cGetItem, "r_vmax", "VMAXTYPE", "r_vmax = vmaxget()", NIL);
|
||||||
Wrapper_add_local(cGetItem, "ptr", tmp);
|
Wrapper_add_local(cGetItem, "ptr", tmp);
|
||||||
Wrapper_add_local(cGetItem, "r_ans", "SEXP r_ans");
|
Wrapper_add_local(cGetItem, "r_ans", "SEXP r_ans");
|
||||||
Wrapper_add_local(cGetItem, "result", tmp1);
|
Wrapper_add_local(cGetItem, "result", tmp1);
|
||||||
|
|
@ -2219,7 +2219,7 @@ int R::defineArrayAccessors(SwigType *type) {
|
||||||
tmp = NewStringf("%s *ptr", SwigType_lstr(base, 0));
|
tmp = NewStringf("%s *ptr", SwigType_lstr(base, 0));
|
||||||
tmp1 = NewStringf("%s value", SwigType_lstr(base, 0));
|
tmp1 = NewStringf("%s value", SwigType_lstr(base, 0));
|
||||||
|
|
||||||
Wrapper_add_localv(cSetItem, "r_vmax", "char *", "r_vmax = vmaxget()", NIL);
|
Wrapper_add_localv(cSetItem, "r_vmax", "VMAXTYPE", "r_vmax = vmaxget()", NIL);
|
||||||
Wrapper_add_local(cSetItem, "__r_nprotect", "int __r_nprotect = 0");
|
Wrapper_add_local(cSetItem, "__r_nprotect", "int __r_nprotect = 0");
|
||||||
|
|
||||||
Wrapper_add_local(cSetItem, "ptr", tmp);
|
Wrapper_add_local(cSetItem, "ptr", tmp);
|
||||||
|
|
@ -2580,7 +2580,7 @@ int R::generateCopyRoutinesObsolete(Node *n) {
|
||||||
|
|
||||||
|
|
||||||
Wrapper_add_localv(toR, "r_obj", "SEXP", "r_obj", NIL);
|
Wrapper_add_localv(toR, "r_obj", "SEXP", "r_obj", NIL);
|
||||||
Wrapper_add_localv(toR, "r_vmax", "char *", "r_vmax = vmaxget()", NIL);
|
Wrapper_add_localv(toR, "r_vmax", "VMAXTYPE", "r_vmax = vmaxget()", NIL);
|
||||||
Wrapper_add_localv(toR, "_tmp_sexp", "SEXP", "_tmp_sexp", NIL);
|
Wrapper_add_localv(toR, "_tmp_sexp", "SEXP", "_tmp_sexp", NIL);
|
||||||
Wrapper_add_local(toR, "__r_nprotect", "int __r_nprotect = 0");
|
Wrapper_add_local(toR, "__r_nprotect", "int __r_nprotect = 0");
|
||||||
Wrapper_add_local(toC, "ecode", "int ecode = 0");
|
Wrapper_add_local(toC, "ecode", "int ecode = 0");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue