[Go] Fixes for Go 1.6: avoid returning Go pointers from
directors that return string values; add a trailing 0 byte when treating Go string as C char*.
This commit is contained in:
parent
f1d1d7b490
commit
223c2a4835
7 changed files with 81 additions and 7 deletions
|
|
@ -24,8 +24,21 @@ class string;
|
|||
%typemap(in) string
|
||||
%{ $1.assign($input.p, $input.n); %}
|
||||
|
||||
%typemap(godirectorout) string
|
||||
%{
|
||||
{
|
||||
p := Swig_malloc(len($input))
|
||||
s := (*[1<<30]byte)(unsafe.Pointer(p))[:len($input)]
|
||||
copy(s, $input)
|
||||
$result = *(*string)(unsafe.Pointer(&s))
|
||||
}
|
||||
%}
|
||||
|
||||
%typemap(directorout) string
|
||||
%{ $result.assign($input.p, $input.n); %}
|
||||
%{
|
||||
$result.assign($input.p, $input.n);
|
||||
free($input.p);
|
||||
%}
|
||||
|
||||
%typemap(out,fragment="AllocateString") string
|
||||
%{ $result = Swig_AllocateString($1.data(), $1.length()); %}
|
||||
|
|
@ -45,10 +58,21 @@ class string;
|
|||
$1 = &$1_str;
|
||||
%}
|
||||
|
||||
%typemap(godirectorout) const string &
|
||||
%{
|
||||
{
|
||||
p := Swig_malloc(len($input))
|
||||
s := (*[1<<30]byte)(unsafe.Pointer(p))[:len($input)]
|
||||
copy(s, $input)
|
||||
$result = *(*string)(unsafe.Pointer(&s))
|
||||
}
|
||||
%}
|
||||
|
||||
%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const string &
|
||||
%{
|
||||
static $*1_ltype $1_str;
|
||||
$1_str.assign($input.p, $input.n);
|
||||
free($input.p);
|
||||
$result = &$1_str;
|
||||
%}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue