Commit 7a4b3601 authored by Robert McGibbon's avatar Robert McGibbon
Browse files

Fix typemap for str/bytes -> std::string

parent 7cdeded0
......@@ -169,11 +169,10 @@
$result = PyBytes_FromStringAndSize($1.c_str(), $1.length());
}
%typemap(in) std::string {
// if we have a C++ method that takes in a std::string, we're most happy to accept
// a python bytes object. But if the user passes in a unicode object we'll try
// to recover by encoding it to UTF-8 bytes
%typemap(in) const std::string & {
// if we have a C++ method that takes in a std::string, we're most happy to
// accept a python bytes object. But if the user passes in a unicode object
// we'll try to recover by encoding it to UTF-8 bytes
PyObject* temp = NULL;
char* c_str = NULL;
Py_ssize_t len = 0;
......@@ -181,19 +180,24 @@
if (PyUnicode_Check($input)) {
temp = PyUnicode_AsUTF8String($input);
if (temp == NULL) {
SWIG_exception_fail(SWIG_TypeError, "'utf-8' codec can't decode byte");
SWIG_exception_fail(SWIG_TypeError, "$symname: 'utf-8' codec can't decode byte");
}
PyBytes_AsStringAndSize(temp, &c_str, &len);
Py_XDECREF(temp);
} else if (PyBytes_Check($input)) {
PyBytes_AsStringAndSize($input, &c_str, &len);
} else {
SWIG_exception_fail(SWIG_TypeError, "argument must be str or bytes");
SWIG_exception_fail(SWIG_TypeError, "$symname: argument must be str or bytes");
}
if (c_str == NULL) {
SWIG_exception_fail(SWIG_TypeError, "argument must be str or bytes");
SWIG_exception_fail(SWIG_TypeError, "$symname: argument must be str or bytes");
}
$1 = std::string(c_str, len);
std::string temp2(c_str, len);
$1 = &temp2;
}
%typemap(freearg) const std::string & {
// Don't delete me
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment