forked from premiere/premiere-libtorrent
don't use the (now private/internal) utf8 functions from libtorrent in the python binding. i.e. fix the python binding build when linking dynamically against libtorrent
This commit is contained in:
parent
0369caae67
commit
27855e17eb
|
@ -42,9 +42,7 @@ BOOST_PYTHON_MODULE(libtorrent)
|
||||||
bind_torrent_handle();
|
bind_torrent_handle();
|
||||||
bind_session();
|
bind_session();
|
||||||
bind_torrent_info();
|
bind_torrent_info();
|
||||||
#if TORRENT_USE_WSTRING
|
|
||||||
bind_unicode_string_conversion();
|
bind_unicode_string_conversion();
|
||||||
#endif
|
|
||||||
bind_torrent_status();
|
bind_torrent_status();
|
||||||
bind_session_settings();
|
bind_session_settings();
|
||||||
bind_version();
|
bind_version();
|
||||||
|
|
|
@ -3,14 +3,9 @@
|
||||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#include <boost/python.hpp>
|
#include <boost/python.hpp>
|
||||||
#include "libtorrent/config.hpp"
|
|
||||||
#include "libtorrent/utf8.hpp"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#if TORRENT_USE_WSTRING
|
|
||||||
|
|
||||||
using namespace boost::python;
|
using namespace boost::python;
|
||||||
using namespace libtorrent;
|
|
||||||
|
|
||||||
struct unicode_from_python
|
struct unicode_from_python
|
||||||
{
|
{
|
||||||
|
@ -32,36 +27,35 @@ struct unicode_from_python
|
||||||
|
|
||||||
static void construct(PyObject* x, converter::rvalue_from_python_stage1_data* data)
|
static void construct(PyObject* x, converter::rvalue_from_python_stage1_data* data)
|
||||||
{
|
{
|
||||||
using libtorrent::wchar_utf8;
|
|
||||||
void* storage = ((converter::rvalue_from_python_storage<
|
void* storage = ((converter::rvalue_from_python_storage<
|
||||||
std::string>*)data)->storage.bytes;
|
std::string>*)data)->storage.bytes;
|
||||||
|
|
||||||
if (PyUnicode_Check(x))
|
if (PyUnicode_Check(x))
|
||||||
{
|
{
|
||||||
std::wstring str;
|
PyObject* utf8 = PyUnicode_AsUTF8String(x);
|
||||||
str.resize(PyUnicode_GetSize(x) + 1, 0);
|
if (utf8 == NULL)
|
||||||
#if PY_VERSION_HEX >= 0x03020000
|
|
||||||
int len = PyUnicode_AsWideChar(x, &str[0], str.size());
|
|
||||||
#else
|
|
||||||
int len = PyUnicode_AsWideChar((PyUnicodeObject*)x, &str[0], str.size());
|
|
||||||
#endif
|
|
||||||
if (len > -1)
|
|
||||||
{
|
{
|
||||||
assert(len < int(str.size()));
|
new (storage) std::string();
|
||||||
str[len] = 0;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if PY_VERSION_HEX >= 0x03000000
|
||||||
|
new (storage) std::string(PyBytes_AsString(utf8)
|
||||||
|
, PyBytes_Size(utf8));
|
||||||
|
#else
|
||||||
|
new (storage) std::string(PyString_AsString(utf8)
|
||||||
|
, PyString_Size(utf8));
|
||||||
|
#endif
|
||||||
|
Py_DECREF(utf8);
|
||||||
}
|
}
|
||||||
else str[str.size()-1] = 0;
|
|
||||||
|
|
||||||
std::string utf8;
|
|
||||||
wchar_utf8(str, utf8);
|
|
||||||
new (storage) std::string(utf8);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if PY_VERSION_HEX >= 0x03000000
|
#if PY_VERSION_HEX >= 0x03000000
|
||||||
new (storage) std::string(PyBytes_AsString(x));
|
new (storage) std::string(PyBytes_AsString(x), PyBytes_Size(x));
|
||||||
#else
|
#else
|
||||||
new (storage) std::string(PyString_AsString(x));
|
new (storage) std::string(PyString_AsString(x)
|
||||||
|
, PyString_Size(x));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
data->convertible = storage;
|
data->convertible = storage;
|
||||||
|
@ -73,5 +67,3 @@ void bind_unicode_string_conversion()
|
||||||
unicode_from_python();
|
unicode_from_python();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // TORRENT_USE_WSTRING
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue