delta_str(): Purged last uses of sprintf (in favor of PyOS_snprintf).

This commit is contained in:
Tim Peters 2002-12-18 20:19:21 +00:00
parent 72a6ddb5ee
commit ba873472d2

View file

@ -1805,27 +1805,42 @@ delta_str(PyDateTime_Delta *self)
int us = GET_TD_MICROSECONDS(self); int us = GET_TD_MICROSECONDS(self);
int hours; int hours;
int minutes; int minutes;
char buf[500]; char buf[100];
int i = 0; char *pbuf = buf;
size_t buflen = sizeof(buf);
int n;
minutes = divmod(seconds, 60, &seconds); minutes = divmod(seconds, 60, &seconds);
hours = divmod(minutes, 60, &minutes); hours = divmod(minutes, 60, &minutes);
if (days) { if (days) {
i += sprintf(buf + i, "%d day%s, ", days, n = PyOS_snprintf(pbuf, buflen, "%d day%s, ", days,
(days == 1 || days == -1) ? "" : "s"); (days == 1 || days == -1) ? "" : "s");
assert(i < sizeof(buf)); if (n < 0 || (size_t)n >= buflen)
goto Fail;
pbuf += n;
buflen -= (size_t)n;
} }
i += sprintf(buf + i, "%d:%02d:%02d", hours, minutes, seconds); n = PyOS_snprintf(pbuf, buflen, "%d:%02d:%02d",
assert(i < sizeof(buf)); hours, minutes, seconds);
if (n < 0 || (size_t)n >= buflen)
goto Fail;
pbuf += n;
buflen -= (size_t)n;
if (us) { if (us) {
i += sprintf(buf + i, ".%06d", us); n = PyOS_snprintf(pbuf, buflen, ".%06d", us);
assert(i < sizeof(buf)); if (n < 0 || (size_t)n >= buflen)
goto Fail;
pbuf += n;
} }
return PyString_FromStringAndSize(buf, i); return PyString_FromStringAndSize(buf, pbuf - buf);
Fail:
PyErr_SetString(PyExc_SystemError, "goofy result from PyOS_snprintf");
return NULL;
} }
/* Pickle support. Quite a maze! While __getstate__/__setstate__ sufficed /* Pickle support. Quite a maze! While __getstate__/__setstate__ sufficed