diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_localemodule.c | 6 | ||||
-rw-r--r-- | Modules/pwdmodule.c | 7 |
2 files changed, 9 insertions, 4 deletions
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index 7c816ff..f9c48e1 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -143,7 +143,7 @@ PyLocale_localeconv(PyObject* self) involved herein */ #define RESULT_STRING(s)\ - x = PyUnicode_FromString(l->s);\ + x = PyUnicode_DecodeUnicodeEscape(l->s, strlen(l->s), "strict");\ if (!x) goto failed;\ PyDict_SetItemString(result, #s, x);\ Py_XDECREF(x) @@ -471,8 +471,10 @@ PyLocale_nl_langinfo(PyObject* self, PyObject* args) /* Check NULL as a workaround for GNU libc's returning NULL instead of an empty string for nl_langinfo(ERA). */ const char *result = nl_langinfo(item); + result = result != NULL ? result : ""; /* XXX may have to convert this to wcs first. */ - return PyUnicode_FromString(result != NULL ? result : ""); + return PyUnicode_DecodeUnicodeEscape(result, strlen(result), + "strict"); } PyErr_SetString(PyExc_ValueError, "unsupported langinfo constant"); return NULL; diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index ea8c19c..57f69e7 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -48,8 +48,11 @@ static PyTypeObject StructPwdType; static void sets(PyObject *v, int i, const char* val) { - if (val) - PyStructSequence_SET_ITEM(v, i, PyUnicode_FromString(val)); + if (val) { + PyObject *o = + PyUnicode_DecodeUnicodeEscape(val, strlen(val), "strict"); + PyStructSequence_SET_ITEM(v, i, o); + } else { PyStructSequence_SET_ITEM(v, i, Py_None); Py_INCREF(Py_None); |