Added more comments to the new structseq repr code and implemented several of Neal's suggestions.
diff --git a/Objects/structseq.c b/Objects/structseq.c
index 8e27441..b6126ba 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -230,23 +230,37 @@
 static PyObject *
 structseq_repr(PyStructSequence *obj)
 {
-	PyObject *tup, *val, *repr;
-	PyTypeObject *typ = Py_TYPE(obj);
-	int i, len;
-	char buf[250+5]; /* "...)\0" */
-	char *cname, *crepr;
-	char *pbuf = buf;
- 	char *endbuf = &buf[250];
+	/* buffer and type size were chosen well considered. */
+#define REPR_BUFFER_SIZE 512
+#define TYPE_MAXSIZE 100
 
-	strncpy(pbuf, typ->tp_name, 50);
-	pbuf += strlen(typ->tp_name) > 50 ? 50 : strlen(typ->tp_name);
-	*pbuf++ = '(';
+	PyObject *tup;
+	PyTypeObject *typ = Py_TYPE(obj);
+	int i, removelast = 0;
+	Py_ssize_t len;
+	char buf[REPR_BUFFER_SIZE];
+	char *endofbuf, *pbuf = buf;
+
+	/* pointer to end of writeable buffer; safes space for "...)\0" */
+	endofbuf= &buf[REPR_BUFFER_SIZE-5];
 
 	if ((tup = make_tuple(obj)) == NULL) {
 		return NULL;
 	}
+
+	/* "typename(", limited to  TYPE_MAXSIZE */
+	len = strlen(typ->tp_name) > TYPE_MAXSIZE ? TYPE_MAXSIZE :
+						    strlen(typ->tp_name);
+	strncpy(pbuf, typ->tp_name, len);
+	pbuf += len;
+	*pbuf++ = '(';
+
 	for (i=0; i < VISIBLE_SIZE(obj); i++) {
+		PyObject *val, *repr;
+		char *cname, *crepr;
+
 		cname = typ->tp_members[i].name;
+		
 		val = PyTuple_GetItem(tup, i);
 		if (cname == NULL || val == NULL) {
 			return NULL;
@@ -262,8 +276,10 @@
 			Py_DECREF(repr);
 			return NULL;
 		}
-		len = strlen(cname) + strlen(crepr) + 3;
-		if ((pbuf+len) < endbuf) {
+		
+		/* + 3: keep space for "=" and ", " */
+ 		len = strlen(cname) + strlen(crepr) + 3;
+		if ((pbuf+len) <= endofbuf) {
 			strcpy(pbuf, cname);
 			pbuf += strlen(cname);
 			*pbuf++ = '=';
@@ -271,23 +287,26 @@
 			pbuf += strlen(crepr);
 			*pbuf++ = ',';
 			*pbuf++ = ' ';
+			removelast = 1;
 			Py_DECREF(repr);
 		}
 		else {
 			strcpy(pbuf, "...");
-			pbuf += 5;
+			pbuf += 3;
+			removelast = 0;
 			Py_DECREF(repr);
 			break;
 		}
 	}
 	Py_DECREF(tup);
-
-	pbuf-=2;
+	if (removelast) {
+		/* overwrite last ", " */
+		pbuf-=2;
+	}
 	*pbuf++ = ')';
 	*pbuf = '\0';
 
-	repr = PyString_FromString(buf);
-	return repr;
+	return PyString_FromString(buf);
 }
 
 static PyObject *