]> granicus.if.org Git - python/commitdiff
module_repr(): Instead of fixing the maximum buf size to 400,
authorBarry Warsaw <barry@python.org>
Thu, 16 Aug 2001 20:39:24 +0000 (20:39 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 16 Aug 2001 20:39:24 +0000 (20:39 +0000)
    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

Objects/moduleobject.c

index 7faa3bbfd3e656a2de36bd95729f02ae884f0919..2ccf0bfd9dd9e2e92c7e7055a3c98a095991e845 100644 (file)
@@ -157,9 +157,14 @@ module_dealloc(PyModuleObject *m)
 static PyObject *
 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 *filename;
+       PyObject *rtn;
+
        name = PyModule_GetName((PyObject *)m);
        if (name == NULL) {
                PyErr_Clear();
@@ -168,12 +173,19 @@ module_repr(PyModuleObject *m)
        filename = PyModule_GetFilename((PyObject *)m);
        if (filename == NULL) {
                PyErr_Clear();
-               sprintf(buf, "<module '%.80s' (built-in)>", name);
-       } else {
-               sprintf(buf, "<module '%.80s' from '%.255s'>", name, filename);
+               buf = PyObject_MALLOC(
+                       sizeof(char) * (strlen(name) + template1len));
+               sprintf(buf, "<module '%s' (built-in)>", name);
        }
-
-       return PyString_FromString(buf);
+       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;
 }
 
 /* We only need a traverse function, no clear function: If the module