From b0acc1b0a35905fa8dc3d3d10581602b5129c87a Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 8 May 2014 19:26:04 +0200 Subject: [PATCH] Issue #21350: Fix file.writelines() to accept arbitrary buffer objects, as advertised. Patch by Brian Kearns. --- Lib/test/test_file2k.py | 7 +++++++ Misc/NEWS | 3 +++ Objects/fileobject.c | 14 +++++++------- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_file2k.py b/Lib/test/test_file2k.py index 7e74e64df6..fae1db6acc 100644 --- a/Lib/test/test_file2k.py +++ b/Lib/test/test_file2k.py @@ -89,6 +89,13 @@ class AutoFileTests(unittest.TestCase): self.assertRaises(TypeError, self.f.writelines, [NonString(), NonString()]) + def testWritelinesBuffer(self): + self.f.writelines([array('c', 'abc')]) + self.f.close() + self.f = open(TESTFN, 'rb') + buf = self.f.read() + self.assertEqual(buf, 'abc') + def testRepr(self): # verify repr works self.assertTrue(repr(self.f).startswith("f_binary && - PyObject_AsReadBuffer(v, - (const void**)&buffer, - &len)) || - PyObject_AsCharBuffer(v, - &buffer, - &len))) { + int res; + if (f->f_binary) { + res = PyObject_AsReadBuffer(v, (const void**)&buffer, &len); + } else { + res = PyObject_AsCharBuffer(v, &buffer, &len); + } + if (res) { PyErr_SetString(PyExc_TypeError, "writelines() argument must be a sequence of strings"); goto error; -- 2.50.1