From: Gilles DAVID Date: Wed, 22 Mar 2017 10:12:45 +0000 (+0100) Subject: Python 3.4: redefine Py_DecodeLocale X-Git-Tag: V9_0_0~25^2~17 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=3611b06f29f80931aaf0605bd7d09d3d0b28344d;p=modules%2Fkernel.git Python 3.4: redefine Py_DecodeLocale The code from decode_ascii_surrogateescape in Python 3.5 was reused. --- diff --git a/src/Container/Container_init_python.cxx b/src/Container/Container_init_python.cxx index 42ab6eaac..e4963c0a2 100644 --- a/src/Container/Container_init_python.cxx +++ b/src/Container/Container_init_python.cxx @@ -29,6 +29,35 @@ #include "utilities.h" #include "Container_init_python.hxx" +#if PY_VERSION_HEX < 0x03050000 +static wchar_t* +Py_DecodeLocale(const char *arg, size_t *size) +{ + wchar_t *res; + unsigned char *in; + wchar_t *out; + size_t argsize = strlen(arg) + 1; + + if (argsize > PY_SSIZE_T_MAX/sizeof(wchar_t)) + return NULL; + res = (wchar_t*) PyMem_RawMalloc(argsize*sizeof(wchar_t)); + if (!res) + return NULL; + + in = (unsigned char*)arg; + out = res; + while(*in) + if(*in < 128) + *out++ = *in++; + else + *out++ = 0xdc00 + *in++; + *out = 0; + if (size != NULL) + *size = out - res; + return res; +} +#endif + void KERNEL_PYTHON::init_python(int argc, char **argv) { if (Py_IsInitialized()) diff --git a/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx b/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx index f8e9b9b76..f55c903bc 100644 --- a/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx +++ b/src/SALOMESDS/SALOMESDS_DataScopeServer.cxx @@ -46,6 +46,35 @@ using namespace SALOMESDS; std::size_t DataScopeServerBase::COUNTER=0; +#if PY_VERSION_HEX < 0x03050000 +static wchar_t* +Py_DecodeLocale(const char *arg, size_t *size) +{ + wchar_t *res; + unsigned char *in; + wchar_t *out; + size_t argsize = strlen(arg) + 1; + + if (argsize > PY_SSIZE_T_MAX/sizeof(wchar_t)) + return NULL; + res = (wchar_t*) PyMem_RawMalloc(argsize*sizeof(wchar_t)); + if (!res) + return NULL; + + in = (unsigned char*)arg; + out = res; + while(*in) + if(*in < 128) + *out++ = *in++; + else + *out++ = 0xdc00 + *in++; + *out = 0; + if (size != NULL) + *size = out - res; + return res; +} +#endif + void DataScopeKiller::shutdown() { Py_Finalize();