From 62f5a9d6c2e99b688e388d33c226e41174640082 Mon Sep 17 00:00:00 2001
From: Neal Norwitz <nnorwitz@gmail.com>
Date: Mon, 1 Apr 2002 00:09:00 +0000
Subject: Convert file.readinto() to stop using METH_OLDARGS & PyArg_Parse. Add
 test for file.readinto().

---
 Lib/test/test_file.py | 15 +++++++++++++++
 Objects/fileobject.c  |  4 ++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py
index c00874d..33a923d 100644
--- a/Lib/test/test_file.py
+++ b/Lib/test/test_file.py
@@ -1,4 +1,5 @@
 import os
+from array import array
 
 from test_support import verify, TESTFN
 from UserList import UserList
@@ -13,6 +14,13 @@ buf = f.read()
 f.close()
 verify(buf == '12')
 
+# verify readinto
+a = array('c', 'x'*10)
+f = open(TESTFN, 'rb')
+n = f.readinto(a)
+f.close()
+verify(buf == a.tostring()[:n])
+
 # verify writelines with integers
 f = open(TESTFN, 'wb')
 try:
@@ -69,6 +77,13 @@ if f.isatty():
 if f.closed:
     raise TestError, 'file.closed should be false'
 
+try:
+    f.readinto("")
+except TypeError:
+    pass
+else:
+    raise TestError, 'file.readinto("") should raise a TypeError'
+
 f.close()
 if not f.closed:
     raise TestError, 'file.closed should be true'
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index ebe0d29..3179574 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -686,7 +686,7 @@ file_readinto(PyFileObject *f, PyObject *args)
 
 	if (f->f_fp == NULL)
 		return err_closed();
-	if (!PyArg_Parse(args, "w#", &ptr, &ntodo))
+	if (!PyArg_ParseTuple(args, "w#", &ptr, &ntodo))
 		return NULL;
 	ndone = 0;
 	while (ntodo > 0) {
@@ -1462,7 +1462,7 @@ static PyMethodDef file_methods[] = {
 	{"truncate",	(PyCFunction)file_truncate,   METH_VARARGS, truncate_doc},
 #endif
 	{"tell",	(PyCFunction)file_tell,       METH_NOARGS,  tell_doc},
-	{"readinto",	(PyCFunction)file_readinto,   METH_OLDARGS, readinto_doc},
+	{"readinto",	(PyCFunction)file_readinto,   METH_VARARGS, readinto_doc},
 	{"readlines",	(PyCFunction)file_readlines,  METH_VARARGS, readlines_doc},
 	{"xreadlines",	(PyCFunction)file_xreadlines, METH_NOARGS,  xreadlines_doc},
 	{"writelines",	(PyCFunction)file_writelines, METH_O,	    writelines_doc},
-- 
cgit v0.12

