diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-12-29 22:39:49 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-12-29 22:39:49 (GMT) |
commit | 7682d043634ea59fc994520ed1b2c305530cc343 (patch) | |
tree | e934977238c216303f8df0ef8e12f5eab515329e | |
parent | 2b4b2d1c882238787d0f341c11d13d92d6dd8df2 (diff) | |
download | cpython-7682d043634ea59fc994520ed1b2c305530cc343.zip cpython-7682d043634ea59fc994520ed1b2c305530cc343.tar.gz cpython-7682d043634ea59fc994520ed1b2c305530cc343.tar.bz2 |
Merged revisions 77122 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r77122 | amaury.forgeotdarc | 2009-12-29 23:03:38 +0100 (mar., 29 déc. 2009) | 3 lines
#7413: Passing '\0' as the separator to datetime.datetime.isoformat()
used to drop the time part of the result.
........
-rw-r--r-- | Lib/test/test_datetime.py | 1 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/datetimemodule.c | 23 |
3 files changed, 18 insertions, 9 deletions
diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py index 24ec895..dbd2f8f 100644 --- a/Lib/test/test_datetime.py +++ b/Lib/test/test_datetime.py @@ -1173,6 +1173,7 @@ class TestDateTime(TestDate): self.assertEqual(t.isoformat(), "0002-03-02T04:05:01.000123") self.assertEqual(t.isoformat('T'), "0002-03-02T04:05:01.000123") self.assertEqual(t.isoformat(' '), "0002-03-02 04:05:01.000123") + self.assertEqual(t.isoformat('\x00'), "0002-03-02\x0004:05:01.000123") # str is ISO format with the separator forced to a blank. self.assertEqual(str(t), "0002-03-02 04:05:01.000123") @@ -12,6 +12,9 @@ What's New in Python 2.6.5 Core and Builtins ----------------- +- Issue #7413: Passing '\0' as the separator to datetime.datetime.isoformat() + used to drop the time part of the result. + - Issue #6108: unicode(exception) and str(exception) should return the same message when only __str__ (and not __unicode__) is overridden in the subclass. diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c index fcbd2e9..ee558ce 100644 --- a/Modules/datetimemodule.c +++ b/Modules/datetimemodule.c @@ -1362,21 +1362,26 @@ isoformat_date(PyDateTime_Date *dt, char buffer[], int bufflen) x = PyOS_snprintf(buffer, bufflen, "%04d-%02d-%02d", GET_YEAR(dt), GET_MONTH(dt), GET_DAY(dt)); + assert(bufflen >= x); return buffer + x; } -static void +static char * isoformat_time(PyDateTime_DateTime *dt, char buffer[], int bufflen) { + int x; int us = DATE_GET_MICROSECOND(dt); - PyOS_snprintf(buffer, bufflen, - "%02d:%02d:%02d", /* 8 characters */ - DATE_GET_HOUR(dt), - DATE_GET_MINUTE(dt), - DATE_GET_SECOND(dt)); + x = PyOS_snprintf(buffer, bufflen, + "%02d:%02d:%02d", + DATE_GET_HOUR(dt), + DATE_GET_MINUTE(dt), + DATE_GET_SECOND(dt)); + assert(bufflen >= x); if (us) - PyOS_snprintf(buffer + 8, bufflen - 8, ".%06d", us); + x += PyOS_snprintf(buffer + x, bufflen - x, ".%06d", us); + assert(bufflen >= x); + return buffer + x; } /* --------------------------------------------------------------------------- @@ -4200,8 +4205,8 @@ datetime_isoformat(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) cp = isoformat_date((PyDateTime_Date *)self, buffer, sizeof(buffer)); assert(cp != NULL); *cp++ = sep; - isoformat_time(self, cp, sizeof(buffer) - (cp - buffer)); - result = PyString_FromString(buffer); + cp = isoformat_time(self, cp, sizeof(buffer) - (cp - buffer)); + result = PyString_FromStringAndSize(buffer, cp - buffer); if (result == NULL || ! HASTZINFO(self)) return result; |