From: Martin v. Löwis Date: Sun, 12 Nov 2006 18:24:26 +0000 (+0000) Subject: Bug #1067760: Deprecate passing floats to file.seek. X-Git-Tag: v2.6a1~2435 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=056dac1bcfb9aa09e156cb79b111d73ac9a44ec1;p=python Bug #1067760: Deprecate passing floats to file.seek. --- diff --git a/Doc/lib/libstdtypes.tex b/Doc/lib/libstdtypes.tex index a9fb19ba3d..ae3e49276b 100644 --- a/Doc/lib/libstdtypes.tex +++ b/Doc/lib/libstdtypes.tex @@ -1689,6 +1689,7 @@ flush the read-ahead buffer. behavior. Note that not all file objects are seekable. + \versionchanged{Passing float values as offset has been deprecated}[2.6] \end{methoddesc} \begin{methoddesc}[file]{tell}{} diff --git a/Misc/NEWS b/Misc/NEWS index 39b698515a..bd9d2649c0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- Bug #1067760: Deprecate passing floats to file.seek. + - Bug #1591996: Correctly forward exception in instance_contains(). - Bug #1588287: fix invalid assertion for `1,2` in debug builds. diff --git a/Objects/fileobject.c b/Objects/fileobject.c index ced07684fd..90c9687ddb 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -540,7 +540,7 @@ file_seek(PyFileObject *f, PyObject *args) int whence; int ret; Py_off_t offset; - PyObject *offobj; + PyObject *offobj, *off_index; if (f->f_fp == NULL) return err_closed(); @@ -548,12 +548,25 @@ file_seek(PyFileObject *f, PyObject *args) whence = 0; if (!PyArg_ParseTuple(args, "O|i:seek", &offobj, &whence)) return NULL; + off_index = PyNumber_Index(offobj); + if (!off_index) { + if (!PyFloat_Check(offobj)) + return NULL; + /* Deprecated in 2.6 */ + PyErr_Clear(); + if (PyErr_Warn(PyExc_DeprecationWarning, + "integer argument expected, got float")) + return NULL; + off_index = offobj; + Py_INCREF(offobj); + } #if !defined(HAVE_LARGEFILE_SUPPORT) - offset = PyInt_AsLong(offobj); + offset = PyInt_AsLong(off_index); #else - offset = PyLong_Check(offobj) ? - PyLong_AsLongLong(offobj) : PyInt_AsLong(offobj); + offset = PyLong_Check(off_index) ? + PyLong_AsLongLong(off_index) : PyInt_AsLong(off_index); #endif + Py_DECREF(off_index); if (PyErr_Occurred()) return NULL;