From 66c195b89dddfa65cbb552ee4e3aded9fb5d2889 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Sat, 11 Dec 2004 08:30:40 +0000 Subject: [PATCH] fix char* typemap in bug #1080514 git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6856 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Examples/test-suite/primitive_types.i | 13 +++++++++++++ .../test-suite/python/primitive_types_runme.py | 9 +++++++++ SWIG/Lib/python/pystrings.swg | 5 ++--- SWIG/Lib/python/pywstrings.swg | 8 +++----- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/SWIG/Examples/test-suite/primitive_types.i b/SWIG/Examples/test-suite/primitive_types.i index 1e345e18c..7ec8547a1 100644 --- a/SWIG/Examples/test-suite/primitive_types.i +++ b/SWIG/Examples/test-suite/primitive_types.i @@ -545,6 +545,19 @@ macro(size_t, pfx, sizet) } +%inline %{ + + const char* char_foo(float f, const char *s) { + return s; + } + + int char_foo(double d, int i) { + return i; + } + +%} + + %apply SWIGTYPE* { char *}; %include "carrays.i" diff --git a/SWIG/Examples/test-suite/python/primitive_types_runme.py b/SWIG/Examples/test-suite/python/primitive_types_runme.py index f31c2f15f..96c0aef74 100644 --- a/SWIG/Examples/test-suite/python/primitive_types_runme.py +++ b/SWIG/Examples/test-suite/python/primitive_types_runme.py @@ -344,3 +344,12 @@ f2 = fptr_ref(f) if f1._a != f2._a: raise RuntimeError, "bad const ptr& typemap" + +v = char_foo(1,3) +if v !=3: + raise RuntimeError, "bad int typemap" + +s = char_foo(1,"hello") +if s !="hello": + raise RuntimeError, "bad char* typemap" + diff --git a/SWIG/Lib/python/pystrings.swg b/SWIG/Lib/python/pystrings.swg index 06f548cc7..20f573b64 100644 --- a/SWIG/Lib/python/pystrings.swg +++ b/SWIG/Lib/python/pystrings.swg @@ -40,12 +40,11 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize) SWIGINTERNSHORT int SWIG_AsCharPtr(PyObject *obj, char **val) { - char* cptr = 0; - if (SWIG_AsCharPtrAndSize(obj, &cptr, (size_t*)(0))) { - if (val) *val = cptr; + if (SWIG_AsCharPtrAndSize(obj, val, (size_t*)(0))) { return 1; } if (val) { + PyErr_Clear(); SWIG_type_error("char *", obj); } return 0; diff --git a/SWIG/Lib/python/pywstrings.swg b/SWIG/Lib/python/pywstrings.swg index 6875d59eb..150dea7a7 100644 --- a/SWIG/Lib/python/pywstrings.swg +++ b/SWIG/Lib/python/pywstrings.swg @@ -44,13 +44,11 @@ SWIG_AsWCharPtrAndSize(PyObject *obj, wchar_t **cptr, size_t *psize) SWIGINTERN int SWIG_AsWCharPtr(PyObject *obj, wchar_t **val) { - wchar_t * cptr = 0; - int res = 0; - if ((res = SWIG_AsWCharPtrAndSize(obj, &cptr, (size_t*)(0)))) { - if (val) *val = cptr; - return res; + if (SWIG_AsWCharPtrAndSize(obj, val, (size_t*)(0))) { + return 1; } if (val) { + PyErr_Clear(); SWIG_type_error("wchar_t *", obj); } return 0;