MCPcopy Create free account
hub / github.com/RT-Thread/env-windows / _readinto

Method _readinto

tools/python-3.11.9-amd64/Lib/_pyio.py:1180–1224  ·  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

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

Callers

nothing calls this directly

Calls 3

_peek_unlockedMethod · 0.95
minFunction · 0.85
readintoMethod · 0.45

Tested by

no test coverage detected