added python converter from unicode to path
This commit is contained in:
@@ -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,35 @@ 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;
|
||||||
|
int ret = wchar_utf8(str, utf8);
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -68,7 +68,7 @@ namespace libtorrent
|
|||||||
return sourceIllegal;
|
return sourceIllegal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
inline int wchar_utf8(const std::wstring &wide, std::string &utf8)
|
inline int wchar_utf8(const std::wstring &wide, std::string &utf8)
|
||||||
{
|
{
|
||||||
// allocate space for worst-case
|
// allocate space for worst-case
|
||||||
@@ -97,7 +97,7 @@ namespace libtorrent
|
|||||||
return sourceIllegal;
|
return sourceIllegal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user