backport r67325: make FileIO.mode always contain 'b'

This commit is contained in:
Benjamin Peterson 2008-11-22 01:59:15 +00:00
parent c078f929cb
commit bfc51567f5
4 changed files with 16 additions and 12 deletions

View file

@ -50,7 +50,7 @@ class AutoFileTests(unittest.TestCase):
# verify expected attributes exist # verify expected attributes exist
f = self.f f = self.f
self.assertEquals(f.mode, "w") self.assertEquals(f.mode, "wb")
self.assertEquals(f.closed, False) self.assertEquals(f.closed, False)
# verify the attributes are readonly # verify the attributes are readonly
@ -160,7 +160,7 @@ class OtherFileTests(unittest.TestCase):
def testModeStrings(self): def testModeStrings(self):
# check invalid mode strings # check invalid mode strings
for mode in ("", "aU", "wU+", "rb", "rt"): for mode in ("", "aU", "wU+", "rw", "rt"):
try: try:
f = _fileio._FileIO(TESTFN, mode) f = _fileio._FileIO(TESTFN, mode)
except ValueError: except ValueError:

View file

@ -1266,7 +1266,7 @@ class MiscIOTest(unittest.TestCase):
def test_attributes(self): def test_attributes(self):
f = io.open(test_support.TESTFN, "wb", buffering=0) f = io.open(test_support.TESTFN, "wb", buffering=0)
self.assertEquals(f.mode, "w") self.assertEquals(f.mode, "wb")
f.close() f.close()
f = io.open(test_support.TESTFN, "U") f = io.open(test_support.TESTFN, "U")
@ -1274,18 +1274,18 @@ class MiscIOTest(unittest.TestCase):
self.assertEquals(f.buffer.name, test_support.TESTFN) self.assertEquals(f.buffer.name, test_support.TESTFN)
self.assertEquals(f.buffer.raw.name, test_support.TESTFN) self.assertEquals(f.buffer.raw.name, test_support.TESTFN)
self.assertEquals(f.mode, "U") self.assertEquals(f.mode, "U")
self.assertEquals(f.buffer.mode, "r") self.assertEquals(f.buffer.mode, "rb")
self.assertEquals(f.buffer.raw.mode, "r") self.assertEquals(f.buffer.raw.mode, "rb")
f.close() f.close()
f = io.open(test_support.TESTFN, "w+") f = io.open(test_support.TESTFN, "w+")
self.assertEquals(f.mode, "w+") self.assertEquals(f.mode, "w+")
self.assertEquals(f.buffer.mode, "r+") # Does it really matter? self.assertEquals(f.buffer.mode, "rb+") # Does it really matter?
self.assertEquals(f.buffer.raw.mode, "r+") self.assertEquals(f.buffer.raw.mode, "rb+")
g = io.open(f.fileno(), "wb", closefd=False) g = io.open(f.fileno(), "wb", closefd=False)
self.assertEquals(g.mode, "w") self.assertEquals(g.mode, "wb")
self.assertEquals(g.raw.mode, "w") self.assertEquals(g.raw.mode, "wb")
self.assertEquals(g.name, f.fileno()) self.assertEquals(g.name, f.fileno())
self.assertEquals(g.raw.name, f.fileno()) self.assertEquals(g.raw.name, f.fileno())
f.close() f.close()

View file

@ -56,6 +56,8 @@ Library
- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if - Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if
the ctypes module is not present. the ctypes module is not present.
- FileIO's mode attribute now always includes ``"b"``.
- Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__. - Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__.
- httplib.HTTPConnection.putheader() now accepts an arbitrary number of values - httplib.HTTPConnection.putheader() now accepts an arbitrary number of values

View file

@ -208,6 +208,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
flags |= O_CREAT; flags |= O_CREAT;
append = 1; append = 1;
break; break;
case 'b':
break;
case '+': case '+':
if (plus) if (plus)
goto bad_mode; goto bad_mode;
@ -682,12 +684,12 @@ mode_string(PyFileIOObject *self)
{ {
if (self->readable) { if (self->readable) {
if (self->writable) if (self->writable)
return "r+"; return "rb+";
else else
return "r"; return "rb";
} }
else else
return "w"; return "wb";
} }
static PyObject * static PyObject *