MCPcopy Index your code
hub / github.com/RustPython/RustPython / _readinto

Method _readinto

Lib/_pyio.py:1152–1198  ·  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

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

Callers

nothing calls this directly

Calls 7

_peek_unlockedMethod · 0.95
isinstanceFunction · 0.85
lenFunction · 0.85
minFunction · 0.85
_checkClosedMethod · 0.45
castMethod · 0.45
readintoMethod · 0.45

Tested by

no test coverage detected