@@ -1789,18 +1789,18 @@ _bufferedreader_read_fast(buffered *self, Py_ssize_t n)
1789
1789
static PyObject *
1790
1790
_bufferedreader_read_generic (buffered * self , Py_ssize_t n )
1791
1791
{
1792
- PyObject * res = NULL ;
1793
1792
Py_ssize_t current_size , remaining , written ;
1794
- char * out ;
1795
1793
1796
1794
current_size = Py_SAFE_DOWNCAST (READAHEAD (self ), Py_off_t , Py_ssize_t );
1797
1795
if (n <= current_size )
1798
1796
return _bufferedreader_read_fast (self , n );
1799
1797
1800
- res = PyBytes_FromStringAndSize ( NULL , n );
1801
- if (res == NULL )
1798
+ PyBytesWriter * writer = PyBytesWriter_Create ( n );
1799
+ if (writer == NULL ) {
1802
1800
goto error ;
1803
- out = PyBytes_AS_STRING (res );
1801
+ }
1802
+ char * out = PyBytesWriter_GetData (writer );
1803
+
1804
1804
remaining = n ;
1805
1805
written = 0 ;
1806
1806
if (current_size > 0 ) {
@@ -1829,11 +1829,9 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t n)
1829
1829
if (r == 0 || r == -2 ) {
1830
1830
/* EOF occurred or read() would block. */
1831
1831
if (r == 0 || written > 0 ) {
1832
- if (_PyBytes_Resize (& res , written ))
1833
- goto error ;
1834
- return res ;
1832
+ return PyBytesWriter_FinishWithSize (writer , written );
1835
1833
}
1836
- Py_DECREF ( res );
1834
+ PyBytesWriter_Discard ( writer );
1837
1835
Py_RETURN_NONE ;
1838
1836
}
1839
1837
remaining -= r ;
@@ -1853,11 +1851,9 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t n)
1853
1851
if (r == 0 || r == -2 ) {
1854
1852
/* EOF occurred or read() would block. */
1855
1853
if (r == 0 || written > 0 ) {
1856
- if (_PyBytes_Resize (& res , written ))
1857
- goto error ;
1858
- return res ;
1854
+ return PyBytesWriter_FinishWithSize (writer , written );
1859
1855
}
1860
- Py_DECREF ( res );
1856
+ PyBytesWriter_Discard ( writer );
1861
1857
Py_RETURN_NONE ;
1862
1858
}
1863
1859
if (remaining > r ) {
@@ -1876,10 +1872,10 @@ _bufferedreader_read_generic(buffered *self, Py_ssize_t n)
1876
1872
break ;
1877
1873
}
1878
1874
1879
- return res ;
1875
+ return PyBytesWriter_Finish ( writer ) ;
1880
1876
1881
1877
error :
1882
- Py_XDECREF ( res );
1878
+ PyBytesWriter_Discard ( writer );
1883
1879
return NULL ;
1884
1880
}
1885
1881
0 commit comments