diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-12-13 19:25:34 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-12-13 19:25:34 (GMT) |
commit | bf5ff765970a15255a06e4a4ee7f18b5745079ad (patch) | |
tree | ac106a4885c12c27a624f296ee0a08d5d6b195c4 /Modules/_io/_iomodule.c | |
parent | 229663775dd6c869e8daceea6d92af638afa520f (diff) | |
download | cpython-bf5ff765970a15255a06e4a4ee7f18b5745079ad.zip cpython-bf5ff765970a15255a06e4a4ee7f18b5745079ad.tar.gz cpython-bf5ff765970a15255a06e4a4ee7f18b5745079ad.tar.bz2 |
Merged revisions 76805 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r76805 | benjamin.peterson | 2009-12-13 13:19:07 -0600 (Sun, 13 Dec 2009) | 7 lines
accept None as the same as having passed no argument in file types #7349
This is for consistency with imitation file objects like StringIO and BytesIO.
This commit also adds a few tests, where they were lacking for concerned
methods.
........
Diffstat (limited to 'Modules/_io/_iomodule.c')
-rw-r--r-- | Modules/_io/_iomodule.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 02776f3..dfd66aa 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -561,6 +561,30 @@ PyNumber_AsOff_t(PyObject *item, PyObject *err) return result; } + +/* Basically the "n" format code with the ability to turn None into -1. */ +int +_PyIO_ConvertSsize_t(PyObject *obj, void *result) { + Py_ssize_t limit; + if (obj == Py_None) { + limit = -1; + } + else if (PyNumber_Check(obj)) { + limit = PyNumber_AsSsize_t(obj, PyExc_OverflowError); + if (limit == -1 && PyErr_Occurred()) + return 0; + } + else { + PyErr_Format(PyExc_TypeError, + "integer argument expected, got '%.200s'", + Py_TYPE(obj)->tp_name); + return 0; + } + *((Py_ssize_t *)result) = limit; + return 1; +} + + static int iomodule_traverse(PyObject *mod, visitproc visit, void *arg) { _PyIO_State *state = IO_MOD_STATE(mod); @@ -574,6 +598,7 @@ iomodule_traverse(PyObject *mod, visitproc visit, void *arg) { return 0; } + static int iomodule_clear(PyObject *mod) { _PyIO_State *state = IO_MOD_STATE(mod); @@ -591,6 +616,7 @@ iomodule_free(PyObject *mod) { iomodule_clear(mod); } + /* * Module definition */ |