From 4922768d02b1117f71d4440da4d57da487f26d54 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 6 Mar 2003 16:31:48 +0000 Subject: [PATCH] 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. --- Lib/httplib.py | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/Lib/httplib.py b/Lib/httplib.py index 789d80c4e11..ca215a4f7ac 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -864,32 +864,42 @@ def _read(self): 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):