diff -r 42b0ba372ec2 Doc/whatsnew/3.7.rst --- a/Doc/whatsnew/3.7.rst Tue Nov 22 07:58:08 2016 +0200 +++ b/Doc/whatsnew/3.7.rst Tue Nov 22 09:51:24 2016 +0200 @@ -105,6 +105,10 @@ Build and C API Changes and :c:type:`wrapperbase` are now of type ``const char *`` rather of ``char *``. (Contributed by Serhiy Storchaka in :issue:`28761`.) +* The result of :c:func:`PyUnicode_AsUTF8AndSize` and :c:func:`PyUnicode_AsUTF8` + is now of type of type ``const char *`` rather of ``char *``. + (Contributed by Serhiy Storchaka in :issue:`XXXXX`.) + Deprecated ========== diff -r 42b0ba372ec2 Include/unicodeobject.h --- a/Include/unicodeobject.h Tue Nov 22 07:58:08 2016 +0200 +++ b/Include/unicodeobject.h Tue Nov 22 09:51:24 2016 +0200 @@ -1127,7 +1127,7 @@ PyAPI_FUNC(int) PyUnicode_ClearFreeList( */ #ifndef Py_LIMITED_API -PyAPI_FUNC(char *) PyUnicode_AsUTF8AndSize( +PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( PyObject *unicode, Py_ssize_t *size); #define _PyUnicode_AsStringAndSize PyUnicode_AsUTF8AndSize @@ -1154,7 +1154,7 @@ PyAPI_FUNC(char *) PyUnicode_AsUTF8AndSi */ #ifndef Py_LIMITED_API -PyAPI_FUNC(char *) PyUnicode_AsUTF8(PyObject *unicode); +PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode); #define _PyUnicode_AsString PyUnicode_AsUTF8 #endif diff -r 42b0ba372ec2 Modules/_dbmmodule.c --- a/Modules/_dbmmodule.c Tue Nov 22 07:58:08 2016 +0200 +++ b/Modules/_dbmmodule.c Tue Nov 22 09:51:24 2016 +0200 @@ -239,7 +239,7 @@ dbm_contains(PyObject *self, PyObject *a return -1; } if (PyUnicode_Check(arg)) { - key.dptr = PyUnicode_AsUTF8AndSize(arg, &size); + key.dptr = (char *)PyUnicode_AsUTF8AndSize(arg, &size); key.dsize = size; if (key.dptr == NULL) return -1; diff -r 42b0ba372ec2 Modules/_decimal/_decimal.c --- a/Modules/_decimal/_decimal.c Tue Nov 22 07:58:08 2016 +0200 +++ b/Modules/_decimal/_decimal.c Tue Nov 22 09:51:24 2016 +0200 @@ -3199,7 +3199,7 @@ dec_format(PyObject *dec, PyObject *args } if (PyUnicode_Check(fmtarg)) { - fmt = PyUnicode_AsUTF8AndSize(fmtarg, &size); + fmt = (char *)PyUnicode_AsUTF8AndSize(fmtarg, &size); if (fmt == NULL) { return NULL; } diff -r 42b0ba372ec2 Modules/_gdbmmodule.c --- a/Modules/_gdbmmodule.c Tue Nov 22 07:58:08 2016 +0200 +++ b/Modules/_gdbmmodule.c Tue Nov 22 09:51:24 2016 +0200 @@ -319,7 +319,7 @@ dbm_contains(PyObject *self, PyObject *a return -1; } if (PyUnicode_Check(arg)) { - key.dptr = PyUnicode_AsUTF8AndSize(arg, &size); + key.dptr = (char *)PyUnicode_AsUTF8AndSize(arg, &size); key.dsize = size; if (key.dptr == NULL) return -1; diff -r 42b0ba372ec2 Objects/object.c --- a/Objects/object.c Tue Nov 22 07:58:08 2016 +0200 +++ b/Objects/object.c Tue Nov 22 09:51:24 2016 +0200 @@ -890,7 +890,7 @@ PyObject_GetAttr(PyObject *v, PyObject * if (tp->tp_getattro != NULL) return (*tp->tp_getattro)(v, name); if (tp->tp_getattr != NULL) { - char *name_str = PyUnicode_AsUTF8(name); + char *name_str = (char *)PyUnicode_AsUTF8(name); if (name_str == NULL) return NULL; return (*tp->tp_getattr)(v, name_str); @@ -934,7 +934,7 @@ PyObject_SetAttr(PyObject *v, PyObject * return err; } if (tp->tp_setattr != NULL) { - char *name_str = PyUnicode_AsUTF8(name); + char *name_str = (char *)PyUnicode_AsUTF8(name); if (name_str == NULL) return -1; err = (*tp->tp_setattr)(v, name_str, value); diff -r 42b0ba372ec2 Objects/unicodeobject.c --- a/Objects/unicodeobject.c Tue Nov 22 07:58:08 2016 +0200 +++ b/Objects/unicodeobject.c Tue Nov 22 09:51:24 2016 +0200 @@ -3956,7 +3956,7 @@ PyUnicode_FSDecoder(PyObject* arg, void* } -char* +const char * PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize) { PyObject *bytes; @@ -3991,7 +3991,7 @@ PyUnicode_AsUTF8AndSize(PyObject *unicod return PyUnicode_UTF8(unicode); } -char* +const char * PyUnicode_AsUTF8(PyObject *unicode) { return PyUnicode_AsUTF8AndSize(unicode, NULL);