From 2fd14d4fb9b8e45f98b4057a11c89a4b0bce1d28 Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Sun, 1 May 2016 23:59:11 +0100 Subject: [PATCH] Explain modperl that ZNC uses UTF-8 internally Thanks to jiggawattz for showing the issue --- modules/modperl/CMakeLists.txt | 1 + modules/modperl/include/perlfragments.swg | 15 +++++++++++++++ modules/modperl/pstring.h | 3 ++- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 modules/modperl/include/perlfragments.swg diff --git a/modules/modperl/CMakeLists.txt b/modules/modperl/CMakeLists.txt index 0150b694..7d14ca38 100644 --- a/modules/modperl/CMakeLists.txt +++ b/modules/modperl/CMakeLists.txt @@ -48,6 +48,7 @@ if(SWIG_FOUND) "-I${PROJECT_BINARY_DIR}/include" "-I${PROJECT_SOURCE_DIR}/include" "-I${CMAKE_CURRENT_SOURCE_DIR}/.." + "-I${CMAKE_CURRENT_SOURCE_DIR}/include" -DZNC_EXPORT_LIB_EXPORT -outdir "${CMAKE_CURRENT_BINARY_DIR}" -o "${CMAKE_CURRENT_BINARY_DIR}/modperl_biglib.cpp" diff --git a/modules/modperl/include/perlfragments.swg b/modules/modperl/include/perlfragments.swg new file mode 100644 index 00000000..da07737d --- /dev/null +++ b/modules/modperl/include/perlfragments.swg @@ -0,0 +1,15 @@ +// Make perl strings to be UTF-8, they are already UTF-8 in ZNC core + +%fragment("SWIG_FromCharPtrAndSize","header") { + SWIGINTERNINLINE SV * + SWIG_FromCharPtrAndSize(const char* carray, size_t size) { + SV *obj = sv_newmortal(); + if (carray) { + sv_setpvn(obj, carray, size); + } else { + sv_setsv(obj, &PL_sv_undef); + } + SvUTF8_on(obj); + return obj; + } +} diff --git a/modules/modperl/pstring.h b/modules/modperl/pstring.h index 3b6c6ecd..91b100e4 100644 --- a/modules/modperl/pstring.h +++ b/modules/modperl/pstring.h @@ -61,7 +61,8 @@ class PString : public CString { break; case STRING: default: - pSV = newSVpv(data(), length()); + pSV = newSVpvn(data(), length()); + SvUTF8_on(pSV); break; }