Commit 4922768d authored by Raymond Hettinger's avatar Raymond Hettinger

Reverted the previous change to read() and readline().

Kevin Jacobs found that the code simplification did not
exactly match the semantics of the original.  Regression
test cases were requested.
parent 5573541b
...@@ -864,32 +864,42 @@ class SSLFile(SharedSocketClient): ...@@ -864,32 +864,42 @@ class SSLFile(SharedSocketClient):
def read(self, size=None): def read(self, size=None):
L = [self._buf] L = [self._buf]
avail = len(self._buf)
while size is None or avail < size:
s = self._read()
if s == '':
break
L.append(s)
avail += len(s)
all = "".join(L)
if size is None: if size is None:
self._buf = '' self._buf = ''
for s in iter(self._read, ""): return all
L.append(s)
return "".join(L)
else: else:
avail = len(self._buf) self._buf = all[size:]
for s in iter(self._read, ""): return all[:size]
L.append(s)
avail += len(s)
if avail >= size:
all = "".join(L)
self._buf = all[size:]
return all[:size]
def readline(self): def readline(self):
L = [self._buf] L = [self._buf]
self._buf = '' self._buf = ''
for s in iter(self._read, ""): while 1:
L.append(s) i = L[-1].find("\n")
if "\n" in s: if i >= 0:
i = s.find("\n") + 1
self._buf = s[i:]
L[-1] = s[:i]
break break
return "".join(L) s = self._read()
if s == '':
break
L.append(s)
if i == -1:
# loop exited because there is no more data
return "".join(L)
else:
all = "".join(L)
# XXX could do enough bookkeeping not to do a 2nd search
i = all.find("\n") + 1
line = all[:i]
self._buf = all[i:]
return line
class FakeSocket(SharedSocketClient): class FakeSocket(SharedSocketClient):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment