lt sync 2996

This commit is contained in:
Andrew Resch 2008-11-30 00:24:13 +00:00
parent ba148a30b1
commit 4d65f237b1
1 changed files with 21 additions and 2 deletions

View File

@ -4,6 +4,7 @@
#include <boost/python.hpp> #include <boost/python.hpp>
#include <boost/filesystem/path.hpp> #include <boost/filesystem/path.hpp>
#include "libtorrent/utf8.hpp"
using namespace boost::python; using namespace boost::python;
@ -26,15 +27,33 @@ struct path_from_python
static void* convertible(PyObject* x) static void* convertible(PyObject* x)
{ {
return PyString_Check(x) ? x : 0; return PyString_Check(x) ? x : PyUnicode_Check(x) ? x : 0;
} }
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<
boost::filesystem::path boost::filesystem::path
>*)data)->storage.bytes; >*)data)->storage.bytes;
if (PyUnicode_Check(x))
{
std::wstring str;
str.resize(PyUnicode_GetSize(x) + 1, 0);
int len = PyUnicode_AsWideChar((PyUnicodeObject*)x, &str[0], str.size());
if (len > -1)
{
assert(len < str.size());
str[len] = 0;
}
else str[str.size()-1] = 0;
std::string utf8 = wchar_utf8(str);
new (storage) boost::filesystem::path(utf8);
}
else
{
new (storage) boost::filesystem::path(PyString_AsString(x)); new (storage) boost::filesystem::path(PyString_AsString(x));
}
data->convertible = storage; data->convertible = storage;
} }
}; };