summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-01-21 00:55:13 +0000
committerAntoine Pitrou <solipsis@pitrou.net>2009-01-21 00:55:13 +0000
commit08838b6acf4d0fecefcf4222632719985190dd67 (patch)
treed11df3aa012f72d2718d5a8ac50ef1a392b98137 /Modules
parent6268cbc77190cf6b4112a272f2870d5361903605 (diff)
downloadcpython-git-08838b6acf4d0fecefcf4222632719985190dd67.tar.gz
Merged revisions 68835 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r68835 | antoine.pitrou | 2009-01-21 01:45:36 +0100 (mer., 21 janv. 2009) | 6 lines Issue #5008: When a file is opened in append mode with the new IO library, do an explicit seek to the end of file (so that e.g. tell() returns the file size rather than 0). This is consistent with the behaviour of the traditional 2.x file object. ........
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_fileio.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/Modules/_fileio.c b/Modules/_fileio.c
index 5b840c000a..7a71837d7b 100644
--- a/Modules/_fileio.c
+++ b/Modules/_fileio.c
@@ -55,6 +55,9 @@ PyTypeObject PyFileIO_Type;
#define PyFileIO_Check(op) (PyObject_TypeCheck((op), &PyFileIO_Type))
+static PyObject *
+portable_lseek(int fd, PyObject *posobj, int whence);
+
/* Returns 0 on success, -1 with exception set on failure. */
static int
internal_close(PyFileIOObject *self)
@@ -315,6 +318,16 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
goto error;
}
+ if (append) {
+ /* For consistent behaviour, we explicitly seek to the
+ end of file (otherwise, it might be done only on the
+ first write()). */
+ PyObject *pos = portable_lseek(self->fd, NULL, 2);
+ if (pos == NULL)
+ goto error;
+ Py_DECREF(pos);
+ }
+
goto done;
error: