]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-119182: Use public PyUnicodeWriter in wrap_strftime() (#129206)
authorVictor Stinner <vstinner@python.org>
Thu, 23 Jan 2025 00:18:26 +0000 (01:18 +0100)
committerGitHub <noreply@github.com>
Thu, 23 Jan 2025 00:18:26 +0000 (01:18 +0100)
Replace the private _PyUnicodeWriter API with the public
PyUnicodeWriter API.

Modules/_datetimemodule.c

index cf8bd60f3e3f81fad41058a41fa05f79ac0c8793..ff2e6d6a098ad9ba8c712193b9b0c461b0d3289c 100644 (file)
@@ -1849,9 +1849,10 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
      * is expensive, don't unless they're actually used.
      */
 
-    _PyUnicodeWriter writer;
-    _PyUnicodeWriter_Init(&writer);
-    writer.overallocate = 1;
+    PyUnicodeWriter *writer = PyUnicodeWriter_Create(0);
+    if (writer == NULL) {
+        goto Error;
+    }
 
     Py_ssize_t flen = PyUnicode_GET_LENGTH(format);
     Py_ssize_t i = 0;
@@ -1955,11 +1956,11 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
             if (ch == 'C') {
                 n -= 2;
             }
-            if (_PyUnicodeWriter_WriteSubstring(&writer, format, start, end) < 0) {
+            if (PyUnicodeWriter_WriteSubstring(writer, format, start, end) < 0) {
                 goto Error;
             }
             start = i;
-            if (_PyUnicodeWriter_WriteASCIIString(&writer, buf, n) < 0) {
+            if (PyUnicodeWriter_WriteUTF8(writer, buf, n) < 0) {
                 goto Error;
             }
             continue;
@@ -1971,25 +1972,25 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
         }
         assert(replacement != NULL);
         assert(PyUnicode_Check(replacement));
-        if (_PyUnicodeWriter_WriteSubstring(&writer, format, start, end) < 0) {
+        if (PyUnicodeWriter_WriteSubstring(writer, format, start, end) < 0) {
             goto Error;
         }
         start = i;
-        if (_PyUnicodeWriter_WriteStr(&writer, replacement) < 0) {
+        if (PyUnicodeWriter_WriteStr(writer, replacement) < 0) {
             goto Error;
         }
     }  /* end while() */
 
     PyObject *newformat;
     if (start == 0) {
-        _PyUnicodeWriter_Dealloc(&writer);
+        PyUnicodeWriter_Discard(writer);
         newformat = Py_NewRef(format);
     }
     else {
-        if (_PyUnicodeWriter_WriteSubstring(&writer, format, start, flen) < 0) {
+        if (PyUnicodeWriter_WriteSubstring(writer, format, start, flen) < 0) {
             goto Error;
         }
-        newformat = _PyUnicodeWriter_Finish(&writer);
+        newformat = PyUnicodeWriter_Finish(writer);
         if (newformat == NULL) {
             goto Done;
         }
@@ -2007,7 +2008,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
     return result;
 
  Error:
-    _PyUnicodeWriter_Dealloc(&writer);
+    PyUnicodeWriter_Discard(writer);
     goto Done;
 }