MCPcopy Index your code
hub / github.com/python/cpython / _readinto

Method _readinto

Lib/_pyio.py:1171–1217  ·  view source on GitHub ↗

Read data into *buf* with at most one system call.

(self, buf, read1)

Source from the content-addressed store, hash-verified

1169 # similar to the io implementation (which implements the methods for
1170 # performance reasons).
1171 def _readinto(self, buf, read1):
1172 """Read data into *buf* with at most one system call."""
1173
1174 self._checkClosed("readinto of closed file")
1175
1176 # Need to create a memoryview object of type 'b', otherwise
1177 # we may not be able to assign bytes to it, and slicing it
1178 # would create a new object.
1179 if not isinstance(buf, memoryview):
1180 buf = memoryview(buf)
1181 if buf.nbytes == 0:
1182 return 0
1183 buf = buf.cast('B')
1184
1185 written = 0
1186 with self._read_lock:
1187 while written < len(buf):
1188
1189 # First try to read from internal buffer
1190 avail = min(len(self._read_buf) - self._read_pos, len(buf))
1191 if avail:
1192 buf[written:written+avail] = \
1193 self._read_buf[self._read_pos:self._read_pos+avail]
1194 self._read_pos += avail
1195 written += avail
1196 if written == len(buf):
1197 break
1198
1199 # If remaining space in callers buffer is larger than
1200 # internal buffer, read directly into callers buffer
1201 if len(buf) - written > self.buffer_size:
1202 n = self.raw.readinto(buf[written:])
1203 if not n:
1204 break # eof
1205 written += n
1206
1207 # Otherwise refill internal buffer - unless we're
1208 # in read1 mode and already got some data
1209 elif not (read1 and written):
1210 if not self._peek_unlocked(1):
1211 break # eof
1212
1213 # In readinto1 mode, return as soon as we have some data
1214 if read1 and written:
1215 break
1216
1217 return written
1218
1219 def tell(self):
1220 # GH-95782: Keep return value non-negative

Callers

nothing calls this directly

Calls 4

_peek_unlockedMethod · 0.95
castMethod · 0.80
_checkClosedMethod · 0.45
readintoMethod · 0.45

Tested by

no test coverage detected