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:
Joseph Wang 2007-10-25 05:00:17 +00:00
commit 7037fecf7e
2 changed files with 14 additions and 12 deletions

View file

@ -96,18 +96,23 @@ SWIG_InitializeModule(0);
}
%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] {
$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]
"$1 = CHAR(STRING_ELT($input, 0));";
%typemap(in,noblock=1) char[ANY] {
$1 = %const_cast(CHAR(STRING_ELT($input, 0)), char *);
}
%typemap(in,noblock=1) char[]
"$1 = CHAR(STRING_ELT($input, 0));";
%typemap(in,noblock=1) char[] {
$1 = %const_cast(CHAR(STRING_ELT($input, 0)), char *);
}
%typemap(memberin) char[] %{
if ($input) strcpy($1, $input);

View file

@ -123,7 +123,7 @@ SWIG_AsCharPtrAndSize(SEXP obj, char** cptr, size_t* psize, int *alloc)
{
if (!cptr) 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));
len = strlen(cstr);
@ -135,7 +135,7 @@ SWIG_AsCharPtrAndSize(SEXP obj, char** cptr, size_t* psize, int *alloc)
*alloc = SWIG_NEWOBJ;
}
else {
*cptr = cstr;
*cptr = strdup(cstr);
*alloc = SWIG_OLDOBJ;
}
} else {
@ -156,10 +156,7 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size)
{
SEXP t, c;
if (!carray) return R_NilValue;
PROTECT(t = allocVector(STRSXP, 1));
c = allocString(size);
strncpy(CHAR(c), carray, size);
SET_STRING_ELT(t, 0, c);
PROTECT(t = Rf_mkCharEnc(carray, size));
UNPROTECT(1);
return t;
}