Skip to content

Commit 6ff5f4f

Browse files
author
marat
committed
Refactor wrap_strftime func
1 parent 2054356 commit 6ff5f4f

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

Modules/_datetimemodule.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1959,6 +1959,8 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
19591959
i++;
19601960
/* A % has been seen and ch is the character after it. */
19611961
PyObject *replacement = NULL;
1962+
int need_decref_replacement = 0;
1963+
19621964
if (ch == 'z') {
19631965
/* %z -> +HHMM */
19641966
if (zreplacement == NULL) {
@@ -2058,22 +2060,11 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
20582060

20592061
PyObject *tmp = make_dash_replacement(object, next_ch, timetuple);
20602062
if (tmp == NULL) {
2061-
Py_DECREF(tmp);
2062-
goto Error;
2063-
}
2064-
2065-
if (PyUnicodeWriter_WriteSubstring(writer, format, start, end) < 0) {
2066-
Py_DECREF(tmp);
2067-
goto Error;
2068-
}
2069-
start = i;
2070-
if (PyUnicodeWriter_WriteStr(writer, tmp) < 0) {
2071-
Py_DECREF(tmp);
20722063
goto Error;
20732064
}
20742065

2075-
Py_DECREF(tmp);
2076-
continue;
2066+
replacement = tmp;
2067+
need_decref_replacement = 1;
20772068
}
20782069
#endif
20792070
else {
@@ -2083,12 +2074,21 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
20832074
assert(replacement != NULL);
20842075
assert(PyUnicode_Check(replacement));
20852076
if (PyUnicodeWriter_WriteSubstring(writer, format, start, end) < 0) {
2077+
if (need_decref_replacement) {
2078+
Py_DECREF(replacement);
2079+
}
20862080
goto Error;
20872081
}
20882082
start = i;
20892083
if (PyUnicodeWriter_WriteStr(writer, replacement) < 0) {
2084+
if (need_decref_replacement) {
2085+
Py_DECREF(replacement);
2086+
}
20902087
goto Error;
20912088
}
2089+
if (need_decref_replacement) {
2090+
Py_DECREF(replacement);
2091+
}
20922092
} /* end while() */
20932093

20942094
PyObject *newformat;

0 commit comments

Comments
 (0)