repr's converted to using PyString_FromFormat() instead of sprintf'ing

into a hardcoded char* buffer.

Closes patch #454743.
This commit is contained in:
Barry Warsaw 2001-08-24 18:34:26 +00:00
parent dadace004b
commit 7ce3694a52
11 changed files with 95 additions and 136 deletions

View File

@ -184,28 +184,22 @@ buffer_compare(PyBufferObject *self, PyBufferObject *other)
static PyObject *
buffer_repr(PyBufferObject *self)
{
char buf[300];
char *status = self->b_readonly ? "read-only" : "read-write";
if ( self->b_base == NULL )
{
sprintf(buf, "<%s buffer ptr %p, size %d at %p>",
status,
self->b_ptr,
self->b_size,
self);
}
return PyString_FromFormat("<%s buffer ptr %p, size %d at %p>",
status,
self->b_ptr,
self->b_size,
self);
else
{
sprintf(buf, "<%s buffer for %p, ptr %p, size %d at %p>",
return PyString_FromFormat(
"<%s buffer for %p, ptr %p, size %d at %p>",
status,
self->b_base,
self->b_ptr,
self->b_size,
self);
}
return PyString_FromString(buf);
}
static long

View File

@ -62,14 +62,12 @@ cell_compare(PyCellObject *a, PyCellObject *b)
static PyObject *
cell_repr(PyCellObject *op)
{
char buf[256];
if (op->ob_ref == NULL)
sprintf(buf, "<cell at %p: empty>", op);
else
sprintf(buf, "<cell at %p: %.80s object at %p>",
op, op->ob_ref->ob_type->tp_name, op->ob_ref);
return PyString_FromString(buf);
return PyString_FromFormat("<cell at %p: empty>", op);
return PyString_FromFormat("<cell at %p: %.80s object at %p>",
op, op->ob_ref->ob_type->tp_name,
op->ob_ref);
}
static int

View File

@ -313,19 +313,17 @@ static PyObject *
class_repr(PyClassObject *op)
{
PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__");
char buf[140];
char *name;
if (op->cl_name == NULL || !PyString_Check(op->cl_name))
name = "?";
else
name = PyString_AsString(op->cl_name);
if (mod == NULL || !PyString_Check(mod))
sprintf(buf, "<class ?.%.100s at %p>", name, op);
return PyString_FromFormat("<class ?.s at %p>", name, op);
else
sprintf(buf, "<class %.50s.%.50s at %p>",
PyString_AsString(mod),
name, op);
return PyString_FromString(buf);
return PyString_FromFormat("<class %s.%s at %p>",
PyString_AsString(mod),
name, op);
}
static PyObject *
@ -776,7 +774,6 @@ instance_repr(PyInstanceObject *inst)
reprstr = PyString_InternFromString("__repr__");
func = instance_getattr(inst, reprstr);
if (func == NULL) {
char buf[140];
PyObject *classname = inst->in_class->cl_name;
PyObject *mod = PyDict_GetItemString(
inst->in_class->cl_dict, "__module__");
@ -787,13 +784,12 @@ instance_repr(PyInstanceObject *inst)
cname = "?";
PyErr_Clear();
if (mod == NULL || !PyString_Check(mod))
sprintf(buf, "<?.%.100s instance at %p>",
cname, inst);
return PyString_FromFormat("<?.%s instance at %p>",
cname, inst);
else
sprintf(buf, "<%.50s.%.50s instance at %p>",
PyString_AsString(mod),
cname, inst);
return PyString_FromString(buf);
return PyString_FromFormat("<%s.%s instance at %p>",
PyString_AsString(mod),
cname, inst);
}
res = PyEval_CallObject(func, (PyObject *)NULL);
Py_DECREF(func);
@ -2042,7 +2038,6 @@ instancemethod_compare(PyMethodObject *a, PyMethodObject *b)
static PyObject *
instancemethod_repr(PyMethodObject *a)
{
char buffer[240];
PyObject *self = a->im_self;
PyObject *func = a->im_func;
PyObject *klass = a->im_class;
@ -2072,8 +2067,8 @@ instancemethod_repr(PyMethodObject *a)
sklassname = PyString_AS_STRING(klassname);
}
if (self == NULL)
sprintf(buffer, "<unbound method %.100s.%.100s>",
sklassname, sfuncname);
result = PyString_FromFormat("<unbound method %s.%s>",
sklassname, sfuncname);
else {
/* XXX Shouldn't use repr() here! */
PyObject *selfrepr = PyObject_Repr(self);
@ -2083,11 +2078,11 @@ instancemethod_repr(PyMethodObject *a)
Py_DECREF(selfrepr);
goto fail;
}
sprintf(buffer, "<bound method %.60s.%.60s of %.60s>",
sklassname, sfuncname, PyString_AS_STRING(selfrepr));
result = PyString_FromFormat("<bound method %s.%s of %s>",
sklassname, sfuncname,
PyString_AS_STRING(selfrepr));
Py_DECREF(selfrepr);
}
result = PyString_FromString(buffer);
fail:
Py_XDECREF(funcname);
Py_XDECREF(klassname);

View File

@ -55,38 +55,36 @@ descr_name(PyDescrObject *descr)
static PyObject *
descr_repr(PyDescrObject *descr, char *format)
{
char buffer[500];
sprintf(buffer, format, descr_name(descr), descr->d_type->tp_name);
return PyString_FromString(buffer);
return PyString_FromFormat(format, descr_name(descr),
descr->d_type->tp_name);
}
static PyObject *
method_repr(PyMethodDescrObject *descr)
{
return descr_repr((PyDescrObject *)descr,
"<method '%.300s' of '%.100s' objects>");
"<method '%s' of '%s' objects>");
}
static PyObject *
member_repr(PyMemberDescrObject *descr)
{
return descr_repr((PyDescrObject *)descr,
"<member '%.300s' of '%.100s' objects>");
"<member '%s' of '%s' objects>");
}
static PyObject *
getset_repr(PyGetSetDescrObject *descr)
{
return descr_repr((PyDescrObject *)descr,
"<attribute '%.300s' of '%.100s' objects>");
"<attribute '%s' of '%s' objects>");
}
static PyObject *
wrapper_repr(PyWrapperDescrObject *descr)
{
return descr_repr((PyDescrObject *)descr,
"<slot wrapper '%.300s' of '%.100s' objects>");
"<slot wrapper '%s' of '%s' objects>");
}
static int
@ -100,8 +98,8 @@ descr_check(PyDescrObject *descr, PyObject *obj, PyTypeObject *type,
}
if (!PyObject_IsInstance(obj, (PyObject *)(descr->d_type))) {
PyErr_Format(PyExc_TypeError,
"descriptor '%.200s' for '%.100s' objects "
"doesn't apply to '%.100s' object",
"descriptor '%s' for '%s' objects "
"doesn't apply to '%s' object",
descr_name((PyDescrObject *)descr),
descr->d_type->tp_name,
obj->ob_type->tp_name);

View File

@ -179,13 +179,11 @@ file_dealloc(PyFileObject *f)
static PyObject *
file_repr(PyFileObject *f)
{
char buf[300];
sprintf(buf, "<%s file '%.256s', mode '%.10s' at %p>",
f->f_fp == NULL ? "closed" : "open",
PyString_AsString(f->f_name),
PyString_AsString(f->f_mode),
f);
return PyString_FromString(buf);
return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
PyString_AsString(f->f_name),
PyString_AsString(f->f_mode),
f);
}
static PyObject *

View File

@ -239,14 +239,11 @@ func_dealloc(PyFunctionObject *op)
static PyObject*
func_repr(PyFunctionObject *op)
{
char buf[140];
if (op->func_name == Py_None)
sprintf(buf, "<anonymous function at %p>", op);
else
sprintf(buf, "<function %.100s at %p>",
PyString_AsString(op->func_name),
op);
return PyString_FromString(buf);
return PyString_FromFormat("<anonymous function at %p>", op);
return PyString_FromFormat("<function %s at %p>",
PyString_AsString(op->func_name),
op);
}
static int

View File

@ -172,15 +172,13 @@ static struct getsetlist meth_getsets [] = {
static PyObject *
meth_repr(PyCFunctionObject *m)
{
char buf[200];
if (m->m_self == NULL)
sprintf(buf, "<built-in function %.80s>", m->m_ml->ml_name);
else
sprintf(buf,
"<built-in method %.80s of %.80s object at %p>",
m->m_ml->ml_name, m->m_self->ob_type->tp_name,
m->m_self);
return PyString_FromString(buf);
return PyString_FromFormat("<built-in function %s>",
m->m_ml->ml_name);
return PyString_FromFormat("<built-in method %s of %s object at %p>",
m->m_ml->ml_name,
m->m_self->ob_type->tp_name,
m->m_self);
}
static int

View File

@ -157,13 +157,8 @@ module_dealloc(PyModuleObject *m)
static PyObject *
module_repr(PyModuleObject *m)
{
static int template1len = sizeof("<module '' (built-in)>") + 1;
static int template2len = sizeof("<module '' from ''>") + 1;
char *buf;
char *name;
char *filename;
PyObject *rtn;
name = PyModule_GetName((PyObject *)m);
if (name == NULL) {
@ -173,19 +168,9 @@ module_repr(PyModuleObject *m)
filename = PyModule_GetFilename((PyObject *)m);
if (filename == NULL) {
PyErr_Clear();
buf = PyObject_MALLOC(
sizeof(char) * (strlen(name) + template1len));
sprintf(buf, "<module '%s' (built-in)>", name);
return PyString_FromFormat("<module '%s' (built-in)>", name);
}
else {
buf = PyObject_MALLOC(
sizeof(char) * (strlen(name) + strlen(filename) +
template2len));
sprintf(buf, "<module '%s' from '%s'>", name, filename);
}
rtn = PyString_FromString(buf);
PyObject_FREE(buf);
return rtn;
return PyString_FromFormat("<module '%s' from '%s'>", name, filename);
}
/* We only need a traverse function, no clear function: If the module

View File

@ -222,6 +222,7 @@ void _PyGC_Dump(PyGC_Head* op)
}
#endif /* WITH_CYCLE_GC */
PyObject *
PyObject_Repr(PyObject *v)
{
@ -235,12 +236,9 @@ PyObject_Repr(PyObject *v)
#endif
if (v == NULL)
return PyString_FromString("<NULL>");
else if (v->ob_type->tp_repr == NULL) {
char buf[120];
sprintf(buf, "<%.80s object at %p>",
v->ob_type->tp_name, v);
return PyString_FromString(buf);
}
else if (v->ob_type->tp_repr == NULL)
return PyString_FromFormat("<%s object at %p",
v->ob_type->tp_name, v);
else {
PyObject *res;
res = (*v->ob_type->tp_repr)(v);

View File

@ -126,30 +126,30 @@ range_length(rangeobject *r)
static PyObject *
range_repr(rangeobject *r)
{
/* buffers must be big enough to hold 3 longs + an int +
* a bit of "(xrange(...) * ...)" text.
*/
char buf1[250];
char buf2[250];
PyObject *rtn;
if (r->start == 0 && r->step == 1)
sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
rtn = PyString_FromFormat("xrange(%ld)",
r->start + r->len * r->step);
else if (r->step == 1)
sprintf(buf1, "xrange(%ld, %ld)",
r->start,
r->start + r->len * r->step);
rtn = PyString_FromFormat("xrange(%ld, %ld)",
r->start,
r->start + r->len * r->step);
else
sprintf(buf1, "xrange(%ld, %ld, %ld)",
r->start,
r->start + r->len * r->step,
r->step);
if (r->reps != 1)
sprintf(buf2, "(%s * %d)", buf1, r->reps);
return PyString_FromString(r->reps == 1 ? buf1 : buf2);
rtn = PyString_FromFormat("xrange(%ld, %ld, %ld)",
r->start,
r->start + r->len * r->step,
r->step);
if (r->reps != 1) {
PyObject *extra = PyString_FromFormat(
"(%s * %d)",
PyString_AS_STRING(rtn), r->reps);
Py_DECREF(rtn);
rtn = extra;
}
return rtn;
}
static PyObject *

View File

@ -113,8 +113,7 @@ type_compare(PyObject *v, PyObject *w)
static PyObject *
type_repr(PyTypeObject *type)
{
PyObject *mod, *name;
char buf[200];
PyObject *mod, *name, *rtn;
mod = type_module(type, NULL);
if (mod == NULL)
@ -126,15 +125,18 @@ type_repr(PyTypeObject *type)
name = type_name(type, NULL);
if (name == NULL)
return NULL;
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
sprintf(buf, "<type '%.80s.%.80s'>",
PyString_AS_STRING(mod),
PyString_AS_STRING(name));
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__")) {
rtn = PyString_FromFormat("<type '%s.%s'>",
PyString_AS_STRING(mod),
PyString_AS_STRING(name));
}
else
sprintf(buf, "<type '%.80s'>", type->tp_name);
rtn = PyString_FromFormat("<type '%s'>", type->tp_name);
Py_XDECREF(mod);
Py_DECREF(name);
return PyString_FromString(buf);
return rtn;
}
static PyObject *
@ -968,8 +970,7 @@ static PyObject *
object_repr(PyObject *self)
{
PyTypeObject *type;
PyObject *mod, *name;
char buf[200];
PyObject *mod, *name, *rtn;
type = self->ob_type;
mod = type_module(type, NULL);
@ -983,15 +984,16 @@ object_repr(PyObject *self)
if (name == NULL)
return NULL;
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
sprintf(buf, "<%.80s.%.80s instance at %p>",
PyString_AS_STRING(mod),
PyString_AS_STRING(name),
self);
rtn = PyString_FromFormat("<%s.%s instance at %p>",
PyString_AS_STRING(mod),
PyString_AS_STRING(name),
self);
else
sprintf(buf, "<%.80s instance at %p>", type->tp_name, self);
rtn = PyString_FromFormat("<%s instance at %p>",
type->tp_name, self);
Py_XDECREF(mod);
Py_DECREF(name);
return PyString_FromString(buf);
return rtn;
}
static PyObject *
@ -2590,13 +2592,9 @@ slot_tp_repr(PyObject *self)
Py_DECREF(func);
return res;
}
else {
char buf[120];
PyErr_Clear();
sprintf(buf, "<%.80s object at %p>",
self->ob_type->tp_name, self);
return PyString_FromString(buf);
}
PyErr_Clear();
return PyString_FromFormat("<%s object at %p>",
self->ob_type->tp_name, self);
}
static PyObject *