Skip to content

Commit

Permalink
pythongh-119182: Use public PyUnicodeWriter in wrap_strftime() (pytho…
Browse files Browse the repository at this point in the history
…n#129206)

Replace the private _PyUnicodeWriter API with the public
PyUnicodeWriter API.
  • Loading branch information
vstinner authored Jan 23, 2025
1 parent 719c9dd commit 327a257
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions Modules/_datetimemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand All @@ -2007,7 +2008,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
return result;

Error:
_PyUnicodeWriter_Dealloc(&writer);
PyUnicodeWriter_Discard(writer);
goto Done;
}

Expand Down

0 comments on commit 327a257

Please sign in to comment.