Some more fixes to deal with constness of char
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10036 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
410da5ce73
commit
7037fecf7e
2 changed files with 14 additions and 12 deletions
17
Lib/r/r.swg
17
Lib/r/r.swg
|
|
@ -96,18 +96,23 @@ SWIG_InitializeModule(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap(in,noblock=1) char* {
|
%typemap(in,noblock=1) char* {
|
||||||
$1 = %reinterpret_cast(CHAR(STRING_ELT($input, 0)), $1_ltype);
|
$1 = %reinterpret_cast(%const_cast(CHAR(STRING_ELT($input, 0)),
|
||||||
|
char *), $1_ltype);
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap(in,noblock=1) char *[ANY] {
|
%typemap(in,noblock=1) char *[ANY] {
|
||||||
$1 = %reinterpret_cast(CHAR(STRING_ELT($input, 0)), $1_ltype);
|
$1 = %reinterpret_cast(%const_cast(CHAR(STRING_ELT($input, 0)),
|
||||||
|
char *),
|
||||||
|
$1_ltype);
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap(in,noblock=1) char[ANY]
|
%typemap(in,noblock=1) char[ANY] {
|
||||||
"$1 = CHAR(STRING_ELT($input, 0));";
|
$1 = %const_cast(CHAR(STRING_ELT($input, 0)), char *);
|
||||||
|
}
|
||||||
|
|
||||||
%typemap(in,noblock=1) char[]
|
%typemap(in,noblock=1) char[] {
|
||||||
"$1 = CHAR(STRING_ELT($input, 0));";
|
$1 = %const_cast(CHAR(STRING_ELT($input, 0)), char *);
|
||||||
|
}
|
||||||
|
|
||||||
%typemap(memberin) char[] %{
|
%typemap(memberin) char[] %{
|
||||||
if ($input) strcpy($1, $input);
|
if ($input) strcpy($1, $input);
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ SWIG_AsCharPtrAndSize(SEXP obj, char** cptr, size_t* psize, int *alloc)
|
||||||
{
|
{
|
||||||
if (!cptr) return SWIG_TypeError;
|
if (!cptr) return SWIG_TypeError;
|
||||||
if (!Rf_isString(obj)) return SWIG_TypeError;
|
if (!Rf_isString(obj)) return SWIG_TypeError;
|
||||||
char *cstr; int len;
|
const char *cstr; int len;
|
||||||
cstr = CHAR(STRING_ELT(obj, 0));
|
cstr = CHAR(STRING_ELT(obj, 0));
|
||||||
len = strlen(cstr);
|
len = strlen(cstr);
|
||||||
|
|
||||||
|
|
@ -135,7 +135,7 @@ SWIG_AsCharPtrAndSize(SEXP obj, char** cptr, size_t* psize, int *alloc)
|
||||||
*alloc = SWIG_NEWOBJ;
|
*alloc = SWIG_NEWOBJ;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
*cptr = cstr;
|
*cptr = strdup(cstr);
|
||||||
*alloc = SWIG_OLDOBJ;
|
*alloc = SWIG_OLDOBJ;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -156,10 +156,7 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size)
|
||||||
{
|
{
|
||||||
SEXP t, c;
|
SEXP t, c;
|
||||||
if (!carray) return R_NilValue;
|
if (!carray) return R_NilValue;
|
||||||
PROTECT(t = allocVector(STRSXP, 1));
|
PROTECT(t = Rf_mkCharEnc(carray, size));
|
||||||
c = allocString(size);
|
|
||||||
strncpy(CHAR(c), carray, size);
|
|
||||||
SET_STRING_ELT(t, 0, c);
|
|
||||||
UNPROTECT(1);
|
UNPROTECT(1);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue