@@ -1789,18 +1789,18 @@ _bufferedreader_read_fast(buffered *self, Py_ssize_t n)
17891789static PyObject *
17901790_bufferedreader_read_generic (buffered * self , Py_ssize_t n )
17911791{
1792- PyObject * res = NULL ;
17931792 Py_ssize_t current_size , remaining , written ;
1794- char * out ;
17951793
17961794 current_size = Py_SAFE_DOWNCAST (READAHEAD (self ), Py_off_t , Py_ssize_t );
17971795 if (n <= current_size )
17981796 return _bufferedreader_read_fast (self , n );
17991797
1800- res = PyBytes_FromStringAndSize ( NULL , n );
1801- if (res == NULL )
1798+ PyBytesWriter * writer = PyBytesWriter_Create ( n );
1799+ if (writer == NULL ) {
18021800 goto error ;
1803- out = PyBytes_AS_STRING (res );
1801+ }
1802+ char * out = PyBytesWriter_GetData (writer );
1803+
18041804 remaining = n ;
18051805 written = 0 ;
18061806 if (current_size > 0 ) {
@@ -1829,11 +1829,9 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t n)
18291829 if (r == 0 || r == -2 ) {
18301830 /* EOF occurred or read() would block. */
18311831 if (r == 0 || written > 0 ) {
1832- if (_PyBytes_Resize (& res , written ))
1833- goto error ;
1834- return res ;
1832+ return PyBytesWriter_FinishWithSize (writer , written );
18351833 }
1836- Py_DECREF ( res );
1834+ PyBytesWriter_Discard ( writer );
18371835 Py_RETURN_NONE ;
18381836 }
18391837 remaining -= r ;
@@ -1853,11 +1851,9 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t n)
18531851 if (r == 0 || r == -2 ) {
18541852 /* EOF occurred or read() would block. */
18551853 if (r == 0 || written > 0 ) {
1856- if (_PyBytes_Resize (& res , written ))
1857- goto error ;
1858- return res ;
1854+ return PyBytesWriter_FinishWithSize (writer , written );
18591855 }
1860- Py_DECREF ( res );
1856+ PyBytesWriter_Discard ( writer );
18611857 Py_RETURN_NONE ;
18621858 }
18631859 if (remaining > r ) {
@@ -1876,10 +1872,10 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t n)
18761872 break ;
18771873 }
18781874
1879- return res ;
1875+ return PyBytesWriter_Finish ( writer ) ;
18801876
18811877error :
1882- Py_XDECREF ( res );
1878+ PyBytesWriter_Discard ( writer );
18831879 return NULL ;
18841880}
18851881
0 commit comments