From 3611b06f29f80931aaf0605bd7d09d3d0b28344d Mon Sep 17 00:00:00 2001 From: Gilles DAVID Date: Wed, 22 Mar 2017 11:12:45 +0100 Subject: [PATCH] Python 3.4: redefine Py_DecodeLocale The code from decode_ascii_surrogateescape in Python 3.5 was reused. --- src/Container/Container_init_python.cxx | 29 +++++++++++++++++++++ src/SALOMESDS/SALOMESDS_DataScopeServer.cxx | 29 +++++++++++++++++++++ 2 files changed, 58 insertions(+) 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(); -- 2.39.2