summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2003-03-06 16:31:48 (GMT)
committerRaymond Hettinger <python@rcn.com>2003-03-06 16:31:48 (GMT)
commit4922768d02b1117f71d4440da4d57da487f26d54 (patch)
tree584f939dc301ae73a8fe73fd5f10f9300378ee7b
parent5573541b6fab4041250958675b4b440aaa4a93c0 (diff)
downloadcpython-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.py46
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):