summaryrefslogtreecommitdiffstats
path: root/Lib/httplib.py
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 /Lib/httplib.py
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.
Diffstat (limited to 'Lib/httplib.py')
-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):