module_repr(): Instead of fixing the maximum buf size to 400,
calculate it on the fly. This way even modules with long package names get an accurate repr instead of a truncated one. The extra malloc/free cost shouldn't be a problem in a repr function. Closes SF bug #437984
This commit is contained in:
parent
e791a6421f
commit
2907fe6ce7
|
@ -157,9 +157,14 @@ module_dealloc(PyModuleObject *m)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
module_repr(PyModuleObject *m)
|
module_repr(PyModuleObject *m)
|
||||||
{
|
{
|
||||||
char buf[400];
|
static int template1len = sizeof("<module '' (built-in)>") + 1;
|
||||||
|
static int template2len = sizeof("<module '' from ''>") + 1;
|
||||||
|
|
||||||
|
char *buf;
|
||||||
char *name;
|
char *name;
|
||||||
char *filename;
|
char *filename;
|
||||||
|
PyObject *rtn;
|
||||||
|
|
||||||
name = PyModule_GetName((PyObject *)m);
|
name = PyModule_GetName((PyObject *)m);
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
|
@ -168,12 +173,19 @@ module_repr(PyModuleObject *m)
|
||||||
filename = PyModule_GetFilename((PyObject *)m);
|
filename = PyModule_GetFilename((PyObject *)m);
|
||||||
if (filename == NULL) {
|
if (filename == NULL) {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
sprintf(buf, "<module '%.80s' (built-in)>", name);
|
buf = PyObject_MALLOC(
|
||||||
} else {
|
sizeof(char) * (strlen(name) + template1len));
|
||||||
sprintf(buf, "<module '%.80s' from '%.255s'>", name, filename);
|
sprintf(buf, "<module '%s' (built-in)>", name);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
return PyString_FromString(buf);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We only need a traverse function, no clear function: If the module
|
/* We only need a traverse function, no clear function: If the module
|
||||||
|
|
Loading…
Reference in New Issue