https://github.com/python/cpython/commit/327a257e6ae4ad0e3b6e00b35d24937e4b0a0395
commit: 327a257e6ae4ad0e3b6e00b35d24937e4b0a0395
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-01-23T01:18:26+01:00
summary:

gh-119182: Use public PyUnicodeWriter in wrap_strftime() (#129206)

Replace the private _PyUnicodeWriter API with the public
PyUnicodeWriter API.

files:
M Modules/_datetimemodule.c

diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index cf8bd60f3e3f81..ff2e6d6a098ad9 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -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;
 }
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to