Commit c7ed0e3c authored by Barry Warsaw's avatar Barry Warsaw

Accept Finn Bock's patch #102208 to hardcode EINVAL to 22 when errno

can't be imported.  This makes StringIO.py work with Jython.

Also, get rid of the string module by converting to string methods.

Shorten some lines by using augmented assignment where appropriate.
parent 132dce22
...@@ -29,8 +29,12 @@ Notes: ...@@ -29,8 +29,12 @@ Notes:
- There's a simple test set (see end of this file). - There's a simple test set (see end of this file).
""" """
import errno try:
import string from errno import EINVAL
except ImportError:
EINVAL = 22
EMPTYSTRING = ''
class StringIO: class StringIO:
def __init__(self, buf = ''): def __init__(self, buf = ''):
...@@ -52,12 +56,12 @@ class StringIO: ...@@ -52,12 +56,12 @@ class StringIO:
if self.closed: if self.closed:
raise ValueError, "I/O operation on closed file" raise ValueError, "I/O operation on closed file"
if self.buflist: if self.buflist:
self.buf = self.buf + string.joinfields(self.buflist, '') self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = [] self.buflist = []
if mode == 1: if mode == 1:
pos = pos + self.pos pos += self.pos
elif mode == 2: elif mode == 2:
pos = pos + self.len pos += self.len
self.pos = max(0, pos) self.pos = max(0, pos)
def tell(self): def tell(self):
if self.closed: if self.closed:
...@@ -67,7 +71,7 @@ class StringIO: ...@@ -67,7 +71,7 @@ class StringIO:
if self.closed: if self.closed:
raise ValueError, "I/O operation on closed file" raise ValueError, "I/O operation on closed file"
if self.buflist: if self.buflist:
self.buf = self.buf + string.joinfields(self.buflist, '') self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = [] self.buflist = []
if n < 0: if n < 0:
newpos = self.len newpos = self.len
...@@ -80,9 +84,9 @@ class StringIO: ...@@ -80,9 +84,9 @@ class StringIO:
if self.closed: if self.closed:
raise ValueError, "I/O operation on closed file" raise ValueError, "I/O operation on closed file"
if self.buflist: if self.buflist:
self.buf = self.buf + string.joinfields(self.buflist, '') self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = [] self.buflist = []
i = string.find(self.buf, '\n', self.pos) i = self.buf.find('\n', self.pos)
if i < 0: if i < 0:
newpos = self.len newpos = self.len
else: else:
...@@ -110,8 +114,7 @@ class StringIO: ...@@ -110,8 +114,7 @@ class StringIO:
if size is None: if size is None:
size = self.pos size = self.pos
elif size < 0: elif size < 0:
raise IOError(errno.EINVAL, raise IOError(EINVAL, "Negative size not allowed")
"Negative size not allowed")
elif size < self.pos: elif size < self.pos:
self.pos = size self.pos = size
self.buf = self.getvalue()[:size] self.buf = self.getvalue()[:size]
...@@ -125,7 +128,7 @@ class StringIO: ...@@ -125,7 +128,7 @@ class StringIO:
newpos = self.pos + len(s) newpos = self.pos + len(s)
if self.pos < self.len: if self.pos < self.len:
if self.buflist: if self.buflist:
self.buf = self.buf + string.joinfields(self.buflist, '') self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = [] self.buflist = []
self.buflist = [self.buf[:self.pos], s, self.buf[newpos:]] self.buflist = [self.buf[:self.pos], s, self.buf[newpos:]]
self.buf = '' self.buf = ''
...@@ -136,13 +139,13 @@ class StringIO: ...@@ -136,13 +139,13 @@ class StringIO:
self.len = newpos self.len = newpos
self.pos = newpos self.pos = newpos
def writelines(self, list): def writelines(self, list):
self.write(string.joinfields(list, '')) self.write(EMPTYSTRING.join(list))
def flush(self): def flush(self):
if self.closed: if self.closed:
raise ValueError, "I/O operation on closed file" raise ValueError, "I/O operation on closed file"
def getvalue(self): def getvalue(self):
if self.buflist: if self.buflist:
self.buf = self.buf + string.joinfields(self.buflist, '') self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = [] self.buflist = []
return self.buf return self.buf
......
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