mirror of
https://github.com/python/cpython.git
synced 2025-12-11 03:20:01 +00:00
Boost buffer sizes in the absence of snprintf on Windows.
Ensure that # of args to sprintf always matches # of format specifiers.
This commit is contained in:
parent
c76e0e5679
commit
72d421b75c
1 changed files with 19 additions and 14 deletions
|
|
@ -61,24 +61,29 @@ range_length(rangeobject *r)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
range_repr(rangeobject *r)
|
range_repr(rangeobject *r)
|
||||||
{
|
{
|
||||||
char buf1[80];
|
/* buffers must be big enough to hold 3 longs + an int +
|
||||||
char buf2[80];
|
* a bit of "(xrange(...) * ...)" text.
|
||||||
|
*/
|
||||||
|
char buf1[250];
|
||||||
|
char buf2[250];
|
||||||
|
|
||||||
if (r->start == 0 && r->step == 1) {
|
if (r->start == 0 && r->step == 1)
|
||||||
sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
|
sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
|
||||||
}
|
|
||||||
else {
|
else if (r->step == 1)
|
||||||
char *fmt = "xrange(%ld, %ld, %ld)";
|
sprintf(buf1, "xrange(%ld, %ld)",
|
||||||
if (r->step == 1)
|
r->start,
|
||||||
fmt = "xrange(%ld, %ld)";
|
r->start + r->len * r->step);
|
||||||
sprintf(buf1, fmt,
|
|
||||||
|
else
|
||||||
|
sprintf(buf1, "xrange(%ld, %ld, %ld)",
|
||||||
r->start,
|
r->start,
|
||||||
r->start + r->len * r->step,
|
r->start + r->len * r->step,
|
||||||
r->step);
|
r->step);
|
||||||
}
|
|
||||||
if (r->reps != 1) {
|
if (r->reps != 1)
|
||||||
sprintf(buf2, "(%s * %d)", buf1, r->reps);
|
sprintf(buf2, "(%s * %d)", buf1, r->reps);
|
||||||
}
|
|
||||||
return PyString_FromString(r->reps == 1 ? buf1 : buf2);
|
return PyString_FromString(r->reps == 1 ? buf1 : buf2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue