diff options
author | Raymond Hettinger <python@rcn.com> | 2003-03-06 16:31:48 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2003-03-06 16:31:48 (GMT) |
commit | 4922768d02b1117f71d4440da4d57da487f26d54 (patch) | |
tree | 584f939dc301ae73a8fe73fd5f10f9300378ee7b | |
parent | 5573541b6fab4041250958675b4b440aaa4a93c0 (diff) | |
download | cpython-4922768d02b1117f71d4440da4d57da487f26d54.zip cpython-4922768d02b1117f71d4440da4d57da487f26d54.tar.gz cpython-4922768d02b1117f71d4440da4d57da487f26d54.tar.bz2 |
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.
-rw-r--r-- | Lib/httplib.py | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py index 789d80c..ca215a4 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -864,32 +864,42 @@ class SSLFile(SharedSocketClient): def read(self, size=None): 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: self._buf = '' - for s in iter(self._read, ""): - L.append(s) - return "".join(L) + return all else: - avail = len(self._buf) - for s in iter(self._read, ""): - L.append(s) - avail += len(s) - if avail >= size: - all = "".join(L) - self._buf = all[size:] - return all[:size] + self._buf = all[size:] + return all[:size] def readline(self): L = [self._buf] self._buf = '' - for s in iter(self._read, ""): - L.append(s) - if "\n" in s: - i = s.find("\n") + 1 - self._buf = s[i:] - L[-1] = s[:i] + while 1: + i = L[-1].find("\n") + if i >= 0: 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): |