Marc-Andre Lemburg:

The maxsplit functionality in .splitlines() was replaced by the keepends
functionality which allows keeping the line end markers together
with the string.
diff --git a/Lib/UserString.py b/Lib/UserString.py
index c2c2bed..528065e 100755
--- a/Lib/UserString.py
+++ b/Lib/UserString.py
@@ -96,7 +96,7 @@
     def rstrip(self): return self.__class__(self.data.rstrip())
     def split(self, sep=None, maxsplit=-1): 
         return self.data.split(sep, maxsplit)
-    def splitlines(self, maxsplit=-1): return self.data.splitlines(maxsplit)
+    def splitlines(self, keepends=0): return self.data.splitlines(keepends)
     def startswith(self, prefix, start=0, end=sys.maxint): 
         return self.data.startswith(prefix, start, end)
     def strip(self): return self.__class__(self.data.strip())
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 4b99ad8..f10f9ab 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -2516,7 +2516,7 @@
 }
 
 PyObject *PyUnicode_Splitlines(PyObject *string,
-			       int maxcount)
+			       int keepends)
 {
     register int i;
     register int j;
@@ -2531,29 +2531,29 @@
     data = PyUnicode_AS_UNICODE(string);
     len = PyUnicode_GET_SIZE(string);
 
-    if (maxcount < 0)
-        maxcount = INT_MAX;
-
     list = PyList_New(0);
     if (!list)
         goto onError;
 
     for (i = j = 0; i < len; ) {
+	int eol;
+	
 	/* Find a line and append it */
 	while (i < len && !Py_UNICODE_ISLINEBREAK(data[i]))
 	    i++;
-	if (maxcount-- <= 0)
-	    break;
-	SPLIT_APPEND(data, j, i);
 
 	/* Skip the line break reading CRLF as one line break */
+	eol = i;
 	if (i < len) {
 	    if (data[i] == '\r' && i + 1 < len &&
 		data[i+1] == '\n')
 		i += 2;
 	    else
 		i++;
+	    if (keepends)
+		eol = i;
 	}
+	SPLIT_APPEND(data, j, eol);
 	j = i;
     }
     if (j < len) {
@@ -3785,21 +3785,21 @@
 }
 
 static char splitlines__doc__[] =
-"S.splitlines([maxsplit]]) -> list of strings\n\
+"S.splitlines([keepends]]) -> list of strings\n\
 \n\
 Return a list of the lines in S, breaking at line boundaries.\n\
-If maxsplit is given, at most maxsplit are done. Line breaks are not\n\
-included in the resulting list.";
+Line breaks are not included in the resulting list unless keepends\n\
+is given and true.";
 
 static PyObject*
 unicode_splitlines(PyUnicodeObject *self, PyObject *args)
 {
-    int maxcount = -1;
+    int keepends = 0;
 
-    if (!PyArg_ParseTuple(args, "|i:splitlines", &maxcount))
+    if (!PyArg_ParseTuple(args, "|i:splitlines", &keepends))
         return NULL;
 
-    return PyUnicode_Splitlines((PyObject *)self, maxcount);
+    return PyUnicode_Splitlines((PyObject *)self, keepends);
 }
 
 static