Bug #1067760: Deprecate passing floats to file.seek.

This commit is contained in:
Martin v. Löwis 2006-11-12 18:24:26 +00:00
parent 065f0c8a06
commit 056dac1bcf
3 changed files with 20 additions and 4 deletions

View 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}{}

View File

@ -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.

View 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;