- There's a simple test set (see end of this file).
"""
-import errno
-import string
+try:
+ from errno import EINVAL
+except ImportError:
+ EINVAL = 22
+
+EMPTYSTRING = ''
class StringIO:
def __init__(self, buf = ''):
if self.closed:
raise ValueError, "I/O operation on closed file"
if self.buflist:
- self.buf = self.buf + string.joinfields(self.buflist, '')
+ self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = []
if mode == 1:
- pos = pos + self.pos
+ pos += self.pos
elif mode == 2:
- pos = pos + self.len
+ pos += self.len
self.pos = max(0, pos)
def tell(self):
if self.closed:
if self.closed:
raise ValueError, "I/O operation on closed file"
if self.buflist:
- self.buf = self.buf + string.joinfields(self.buflist, '')
+ self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = []
if n < 0:
newpos = self.len
if self.closed:
raise ValueError, "I/O operation on closed file"
if self.buflist:
- self.buf = self.buf + string.joinfields(self.buflist, '')
+ self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = []
- i = string.find(self.buf, '\n', self.pos)
+ i = self.buf.find('\n', self.pos)
if i < 0:
newpos = self.len
else:
if size is None:
size = self.pos
elif size < 0:
- raise IOError(errno.EINVAL,
- "Negative size not allowed")
+ raise IOError(EINVAL, "Negative size not allowed")
elif size < self.pos:
self.pos = size
self.buf = self.getvalue()[:size]
newpos = self.pos + len(s)
if self.pos < self.len:
if self.buflist:
- self.buf = self.buf + string.joinfields(self.buflist, '')
+ self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = []
self.buflist = [self.buf[:self.pos], s, self.buf[newpos:]]
self.buf = ''
self.len = newpos
self.pos = newpos
def writelines(self, list):
- self.write(string.joinfields(list, ''))
+ self.write(EMPTYSTRING.join(list))
def flush(self):
if self.closed:
raise ValueError, "I/O operation on closed file"
def getvalue(self):
if self.buflist:
- self.buf = self.buf + string.joinfields(self.buflist, '')
+ self.buf += EMPTYSTRING.join(self.buflist)
self.buflist = []
return self.buf