From e58449cde70e29e80e62233d0e6ff7387c58bce6 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 30 Oct 2024 13:42:33 +0100 Subject: [PATCH] dtoolutil: Let Python do Filename conversion to UTF-8 --- dtool/src/dtoolutil/filename_ext.cxx | 30 ++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/dtool/src/dtoolutil/filename_ext.cxx b/dtool/src/dtoolutil/filename_ext.cxx index 6de25dee3d..12b85111d0 100644 --- a/dtool/src/dtoolutil/filename_ext.cxx +++ b/dtool/src/dtoolutil/filename_ext.cxx @@ -33,10 +33,17 @@ __init__(PyObject *path) { Py_ssize_t length; if (PyUnicode_CheckExact(path)) { - wchar_t *data; - data = PyUnicode_AsWideCharString(path, &length); - (*_this) = wstring(data, length); - PyMem_Free(data); + if (Filename::get_filesystem_encoding() == TextEncoder::E_utf8) { + const char *data = PyUnicode_AsUTF8AndSize(path, &length); + if (data != nullptr) { + (*_this) = string(data, length); + } + } else { + wchar_t *data; + data = PyUnicode_AsWideCharString(path, &length); + (*_this) = wstring(data, length); + PyMem_Free(data); + } return; } @@ -67,10 +74,17 @@ __init__(PyObject *path) { } if (PyUnicode_CheckExact(path_str)) { - wchar_t *data; - data = PyUnicode_AsWideCharString(path_str, &length); - (*_this) = Filename::from_os_specific_w(wstring(data, length)); - PyMem_Free(data); + if (Filename::get_filesystem_encoding() == TextEncoder::E_utf8) { + const char *data = PyUnicode_AsUTF8AndSize(path_str, &length); + if (data != nullptr) { + (*_this) = Filename::from_os_specific(string(data, length)); + } + } else { + wchar_t *data; + data = PyUnicode_AsWideCharString(path_str, &length); + (*_this) = Filename::from_os_specific_w(wstring(data, length)); + PyMem_Free(data); + } } else if (PyBytes_CheckExact(path_str)) { char *data;