]> granicus.if.org Git - python/commitdiff
Issue #28769: The result of PyUnicode_AsUTF8AndSize() and PyUnicode_AsUTF8()
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 22 Jan 2017 21:07:07 +0000 (23:07 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 22 Jan 2017 21:07:07 +0000 (23:07 +0200)
is now of type "const char *" rather of "char *".

Doc/c-api/unicode.rst
Doc/whatsnew/3.7.rst
Include/unicodeobject.h
Misc/NEWS
Modules/_dbmmodule.c
Modules/_decimal/_decimal.c
Modules/_gdbmmodule.c
Objects/object.c
Objects/unicodeobject.c

index a5d6c862d9c75210a34a4157c41bb80864293047..bcae44ef4959c49ddefd8d6aa7ab8c356990d7f8 100644 (file)
@@ -1038,7 +1038,7 @@ These are the UTF-8 codec APIs:
    raised by the codec.
 
 
-.. c:function:: char* PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)
+.. c:function:: const char* PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)
 
    Return a pointer to the UTF-8 encoding of the Unicode object, and
    store the size of the encoded representation (in bytes) in *size*.  The
@@ -1055,13 +1055,19 @@ These are the UTF-8 codec APIs:
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.7
+      The return type is now ``const char *`` rather of ``char *``.
+
 
-.. c:function:: char* PyUnicode_AsUTF8(PyObject *unicode)
+.. c:function:: const char* PyUnicode_AsUTF8(PyObject *unicode)
 
    As :c:func:`PyUnicode_AsUTF8AndSize`, but does not store the size.
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.7
+      The return type is now ``const char *`` rather of ``char *``.
+
 
 .. c:function:: PyObject* PyUnicode_EncodeUTF8(const Py_UNICODE *s, Py_ssize_t size, const char *errors)
 
index fe03defa65fae1f23a08d53b809e0c265280fe72..5353a141cbcdddbc3b44629c05bb7158e5d1074a 100644 (file)
@@ -124,6 +124,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 ``const char *`` rather of ``char *``.
+  (Contributed by Serhiy Storchaka in :issue:`28769`.)
+
 
 Deprecated
 ==========
index 87cd96d90338e136cd070b8c9954a3e778d2d3df..6a0740a0d74afb90c4f29191748e7111fb09ce7a 100644 (file)
@@ -1135,7 +1135,7 @@ PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
 */
 
 #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
@@ -1162,7 +1162,7 @@ PyAPI_FUNC(char *) PyUnicode_AsUTF8AndSize(
 */
 
 #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
 
index efd8e3263554f2c28737f6f01f2046ee6bdfc579..c68ffe86b79d1cd66d5d2594cc68c11b98b79f10 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -614,6 +614,9 @@ Windows
 C API
 -----
 
+- Issue #28769: The result of PyUnicode_AsUTF8AndSize() and PyUnicode_AsUTF8()
+  is now of type "const char *" rather of "char *".
+
 - Issue #29058: All stable API extensions added after Python 3.2 are now
   available only when Py_LIMITED_API is set to the PY_VERSION_HEX value of
   the minimum Python version supporting this API.
index 804978a6ac59c75de8032a3c199d04634568653f..52bdd0b4dd0c520a98fe01ff30a101ff38e55043 100644 (file)
@@ -239,7 +239,7 @@ dbm_contains(PyObject *self, PyObject *arg)
          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;
index fcc1f151cf51e0134f1af73d35c1a21d2696cd1a..933b3f575a4541f521db4a89314deb2c222574b3 100644 (file)
@@ -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;
         }
index daae71dc8dca90697278d2e8cfce90fc0efa3383..b727ba6de2b5698b927e3fc1c690aafbc5ddc5af 100644 (file)
@@ -319,7 +319,7 @@ dbm_contains(PyObject *self, PyObject *arg)
         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;
index 7b80bcb91da88c79c5be121b911da28e8ffd43d9..93cdc1014ff8e776bf8e05990d2936c119216087 100644 (file)
@@ -890,10 +890,10 @@ PyObject_GetAttr(PyObject *v, PyObject *name)
     if (tp->tp_getattro != NULL)
         return (*tp->tp_getattro)(v, name);
     if (tp->tp_getattr != NULL) {
-        char *name_str = PyUnicode_AsUTF8(name);
+        const char *name_str = PyUnicode_AsUTF8(name);
         if (name_str == NULL)
             return NULL;
-        return (*tp->tp_getattr)(v, name_str);
+        return (*tp->tp_getattr)(v, (char *)name_str);
     }
     PyErr_Format(PyExc_AttributeError,
                  "'%.50s' object has no attribute '%U'",
@@ -934,10 +934,10 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
         return err;
     }
     if (tp->tp_setattr != NULL) {
-        char *name_str = PyUnicode_AsUTF8(name);
+        const char *name_str = PyUnicode_AsUTF8(name);
         if (name_str == NULL)
             return -1;
-        err = (*tp->tp_setattr)(v, name_str, value);
+        err = (*tp->tp_setattr)(v, (char *)name_str, value);
         Py_DECREF(name);
         return err;
     }
index 5fbe56cce146649fb4044d29fbd165e8be9ba453..b711f0ccced77f0b883ca7dddc25dc5ba666acca 100644 (file)
@@ -3972,7 +3972,7 @@ PyUnicode_FSDecoder(PyObject* arg, void* addr)
 }
 
 
-char*
+const char *
 PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize)
 {
     PyObject *bytes;
@@ -4007,7 +4007,7 @@ PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize)
     return PyUnicode_UTF8(unicode);
 }
 
-char*
+const char *
 PyUnicode_AsUTF8(PyObject *unicode)
 {
     return PyUnicode_AsUTF8AndSize(unicode, NULL);