]> granicus.if.org Git - python/commitdiff
Bug #1067760: Deprecate passing floats to file.seek.
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 12 Nov 2006 18:24:26 +0000 (18:24 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 12 Nov 2006 18:24:26 +0000 (18:24 +0000)
Doc/lib/libstdtypes.tex
Misc/NEWS
Objects/fileobject.c

index a9fb19ba3d44d054450671466f19ecf1b388ed1a..ae3e49276b6041ec4735bd1afe702255c9c57563 100644 (file)
@@ -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}{}
index 39b698515a96bae1ccbaa4a47621c0337c4ff1a1..bd9d2649c06a9a3940dc3545af17f49a411fd65c 100644 (file)
--- 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.
index ced07684fd31222f5ddc31d0555dd79770196456..90c9687ddbd7797b644d84508935ec407bb52578 100644 (file)
@@ -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;