Use Py_ssize_t to count the
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 4f607d6..c92499d 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -193,8 +193,8 @@
 builtin_filter(PyObject *self, PyObject *args)
 {
 	PyObject *func, *seq, *result, *it, *arg;
-	int len;   /* guess for result list size */
-	register int j;
+	Py_ssize_t len;   /* guess for result list size */
+	register Py_ssize_t j;
 
 	if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
 		return NULL;
@@ -860,7 +860,7 @@
 	len = 0;
 	for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
 		PyObject *curseq;
-		int curlen;
+		Py_ssize_t curlen;
 
 		/* Get iterator. */
 		curseq = PyTuple_GetItem(args, i+1);
@@ -1338,7 +1338,7 @@
 builtin_ord(PyObject *self, PyObject* obj)
 {
 	long ord;
-	int size;
+	Py_ssize_t size;
 
 	if (PyString_Check(obj)) {
 		size = PyString_GET_SIZE(obj);
@@ -1363,7 +1363,7 @@
 
 	PyErr_Format(PyExc_TypeError,
 		     "ord() expected a character, "
-		     "but string of length %d found",
+		     "but string of length %zd found",
 		     size);
 	return NULL;
 }
@@ -2094,10 +2094,10 @@
 builtin_zip(PyObject *self, PyObject *args)
 {
 	PyObject *ret;
-	const int itemsize = PySequence_Length(args);
-	int i;
+	const Py_ssize_t itemsize = PySequence_Length(args);
+	Py_ssize_t i;
 	PyObject *itlist;  /* tuple of iterators */
-	int len;	   /* guess at result length */
+	Py_ssize_t len;	   /* guess at result length */
 
 	if (itemsize == 0)
 		return PyList_New(0);
@@ -2111,7 +2111,7 @@
 	len = -1;	/* unknown */
 	for (i = 0; i < itemsize; ++i) {
 		PyObject *item = PyTuple_GET_ITEM(args, i);
-		int thislen = _PyObject_LengthHint(item);
+		Py_ssize_t thislen = _PyObject_LengthHint(item);
 		if (thislen < 0) {
 			if (!PyErr_ExceptionMatches(PyExc_TypeError)  &&
 			    !PyErr_ExceptionMatches(PyExc_AttributeError)) {
@@ -2460,7 +2460,7 @@
 			Py_DECREF(good);
 		}
 		if (ok) {
-			int reslen;
+			Py_ssize_t reslen;
 			if (!PyString_Check(item)) {
 				PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
 					" __getitem__ returned different type");
@@ -2473,7 +2473,7 @@
 					PyString_AS_STRING(item)[0];
 			} else {
 				/* do we need more space? */
-				int need = j + reslen + len-i-1;
+				Py_ssize_t need = j + reslen + len-i-1;
 				if (need > outlen) {
 					/* overallocate, to avoid reallocations */
 					if (need<2*outlen)
@@ -2513,8 +2513,8 @@
 {
 	PyObject *result;
 	register int i, j;
-	int len = PyUnicode_GetSize(strobj);
-	int outlen = len;
+	Py_ssize_t len = PyUnicode_GetSize(strobj);
+	Py_ssize_t outlen = len;
 
 	if (func == Py_None) {
 		/* If it's a real string we can return the original,
@@ -2554,7 +2554,7 @@
 			Py_DECREF(good);
 		}
 		if (ok) {
-			int reslen;
+			Py_ssize_t reslen;
 			if (!PyUnicode_Check(item)) {
 				PyErr_SetString(PyExc_TypeError,
 				"can't filter unicode to unicode:"
@@ -2568,7 +2568,7 @@
 					PyUnicode_AS_UNICODE(item)[0];
 			else {
 				/* do we need more space? */
-				int need = j + reslen + len - i - 1;
+				Py_ssize_t need = j + reslen + len - i - 1;
 				if (need > outlen) {
 					/* overallocate,
 					   to avoid reallocations */