time: fix gcc warning

* Create format_arg variable to use the right types
 * Strip trailing spaces
This commit is contained in:
Victor Stinner 2010-10-07 01:00:52 +00:00
parent 4726e40e00
commit ef12810f0c

View File

@ -384,31 +384,31 @@ gettmarg(PyObject *args, struct tm *p)
* asctime(). Return 1 if all values are valid, otherwise set an exception * asctime(). Return 1 if all values are valid, otherwise set an exception
* and returns 0. * and returns 0.
*/ */
static int static int
checktm(struct tm* buf) checktm(struct tm* buf)
{ {
/* Checks added to make sure strftime() and asctime() does not crash Python by /* Checks added to make sure strftime() and asctime() does not crash Python by
indexing blindly into some array for a textual representation indexing blindly into some array for a textual representation
by some bad index (fixes bug #897625 and #6608). by some bad index (fixes bug #897625 and #6608).
Also support values of zero from Python code for arguments in which Also support values of zero from Python code for arguments in which
that is out of range by forcing that value to the lowest value that that is out of range by forcing that value to the lowest value that
is valid (fixed bug #1520914). is valid (fixed bug #1520914).
Valid ranges based on what is allowed in struct tm: Valid ranges based on what is allowed in struct tm:
- tm_year: [0, max(int)] (1) - tm_year: [0, max(int)] (1)
- tm_mon: [0, 11] (2) - tm_mon: [0, 11] (2)
- tm_mday: [1, 31] - tm_mday: [1, 31]
- tm_hour: [0, 23] - tm_hour: [0, 23]
- tm_min: [0, 59] - tm_min: [0, 59]
- tm_sec: [0, 60] - tm_sec: [0, 60]
- tm_wday: [0, 6] (1) - tm_wday: [0, 6] (1)
- tm_yday: [0, 365] (2) - tm_yday: [0, 365] (2)
- tm_isdst: [-max(int), max(int)] - tm_isdst: [-max(int), max(int)]
(1) gettmarg() handles bounds-checking. (1) gettmarg() handles bounds-checking.
(2) Python's acceptable range is one greater than the range in C, (2) Python's acceptable range is one greater than the range in C,
thus need to check against automatic decrement by gettmarg(). thus need to check against automatic decrement by gettmarg().
*/ */
if (buf->tm_mon == -1) if (buf->tm_mon == -1)
@ -472,6 +472,7 @@ time_strftime(PyObject *self, PyObject *args)
#else #else
PyObject *format; PyObject *format;
#endif #endif
PyObject *format_arg;
size_t fmtlen, buflen; size_t fmtlen, buflen;
time_char *outbuf = NULL; time_char *outbuf = NULL;
size_t i; size_t i;
@ -482,7 +483,7 @@ time_strftime(PyObject *self, PyObject *args)
/* Will always expect a unicode string to be passed as format. /* Will always expect a unicode string to be passed as format.
Given that there's no str type anymore in py3k this seems safe. Given that there's no str type anymore in py3k this seems safe.
*/ */
if (!PyArg_ParseTuple(args, "U|O:strftime", &format, &tup)) if (!PyArg_ParseTuple(args, "U|O:strftime", &format_arg, &tup))
return NULL; return NULL;
if (tup == NULL) { if (tup == NULL) {
@ -501,13 +502,13 @@ time_strftime(PyObject *self, PyObject *args)
buf.tm_isdst = 1; buf.tm_isdst = 1;
#ifdef HAVE_WCSFTIME #ifdef HAVE_WCSFTIME
format = PyUnicode_AsWideCharString((PyUnicodeObject*)format, NULL); format = PyUnicode_AsWideCharString((PyUnicodeObject*)format_arg, NULL);
if (format == NULL) if (format == NULL)
return NULL; return NULL;
fmt = format; fmt = format;
#else #else
/* Convert the unicode string to an ascii one */ /* Convert the unicode string to an ascii one */
format = PyUnicode_AsEncodedString(format, TZNAME_ENCODING, NULL); format = PyUnicode_AsEncodedString(format_arg, TZNAME_ENCODING, NULL);
if (format == NULL) if (format == NULL)
return NULL; return NULL;
fmt = PyBytes_AS_STRING(format); fmt = PyBytes_AS_STRING(format);