[Python-checkins] r77125 - in python/branches/release26-maint: Lib/test/test_datetime.py Misc/NEWS Modules/datetimemodule.c
amaury.forgeotdarc
python-checkins at python.org
Tue Dec 29 23:39:49 CET 2009
Author: amaury.forgeotdarc
Date: Tue Dec 29 23:39:49 2009
New Revision: 77125
Log:
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.
........
Modified:
python/branches/release26-maint/ (props changed)
python/branches/release26-maint/Lib/test/test_datetime.py
python/branches/release26-maint/Misc/NEWS
python/branches/release26-maint/Modules/datetimemodule.c
Modified: python/branches/release26-maint/Lib/test/test_datetime.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_datetime.py (original)
+++ python/branches/release26-maint/Lib/test/test_datetime.py Tue Dec 29 23:39:49 2009
@@ -1173,6 +1173,7 @@
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")
Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS (original)
+++ python/branches/release26-maint/Misc/NEWS Tue Dec 29 23:39:49 2009
@@ -12,6 +12,9 @@
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.
Modified: python/branches/release26-maint/Modules/datetimemodule.c
==============================================================================
--- python/branches/release26-maint/Modules/datetimemodule.c (original)
+++ python/branches/release26-maint/Modules/datetimemodule.c Tue Dec 29 23:39:49 2009
@@ -1362,21 +1362,26 @@
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 @@
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;
More information about the Python-checkins
mailing list