From c1b65d1831265534cb1613d7bf0ad7643fddb795 Mon Sep 17 00:00:00 2001 From: Brian Curtin Date: Mon, 7 Nov 2011 14:18:54 -0600 Subject: Fix 13327. Remove explicit None arguments from futimes, futimens, futimesat, and lutimes. --- Doc/library/os.rst | 16 ++++++---------- Lib/test/test_posix.py | 4 ++++ Modules/posixmodule.c | 35 +++++++++++++++++------------------ 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 76ad7e0..acd525b 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -872,8 +872,7 @@ as internal buffering of data. .. versionadded:: 3.3 -.. function:: futimesat(dirfd, path, (atime, mtime)) - futimesat(dirfd, path, None) +.. function:: futimesat(dirfd, path[, (atime, mtime)]) Like :func:`utime` but if *path* is relative, it is taken as relative to *dirfd*. If *path* is relative and *dirfd* is the special value :data:`AT_FDCWD`, then *path* @@ -884,12 +883,11 @@ as internal buffering of data. .. versionadded:: 3.3 -.. function:: futimens(fd, (atime_sec, atime_nsec), (mtime_sec, mtime_nsec)) - futimens(fd, None, None) +.. function:: futimens(fd[, (atime_sec, atime_nsec), (mtime_sec, mtime_nsec)]) Updates the timestamps of a file specified by the file descriptor *fd*, with nanosecond precision. - The second form sets *atime* and *mtime* to the current time. + If no second argument is given, set *atime* and *mtime* to the current time. If *atime_nsec* or *mtime_nsec* is specified as :data:`UTIME_NOW`, the corresponding timestamp is updated to the current time. If *atime_nsec* or *mtime_nsec* is specified as :data:`UTIME_OMIT`, the corresponding @@ -911,11 +909,10 @@ as internal buffering of data. .. versionadded:: 3.3 -.. function:: futimes(fd, (atime, mtime)) - futimes(fd, None) +.. function:: futimes(fd[, (atime, mtime)]) Set the access and modified time of the file specified by the file - descriptor *fd* to the given values. If the second form is used, set the + descriptor *fd* to the given values. If no second argument is used, set the access and modified times to the current time. Availability: Unix. @@ -1702,8 +1699,7 @@ Files and Directories Added support for Windows 6.0 (Vista) symbolic links. -.. function:: lutimes(path, (atime, mtime)) - lutimes(path, None) +.. function:: lutimes(path[, (atime, mtime)]) Like :func:`utime`, but if *path* is a symbolic link, it is not dereferenced. diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index c8d0859..cb33477 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -235,6 +235,7 @@ class PosixTester(unittest.TestCase): fd = os.open(support.TESTFN, os.O_RDONLY) try: posix.futimes(fd, None) + posix.futimes(fd) self.assertRaises(TypeError, posix.futimes, fd, (None, None)) self.assertRaises(TypeError, posix.futimes, fd, (now, None)) self.assertRaises(TypeError, posix.futimes, fd, (None, now)) @@ -252,6 +253,7 @@ class PosixTester(unittest.TestCase): self.assertRaises(TypeError, posix.lutimes, support.TESTFN, (None, now)) posix.lutimes(support.TESTFN, (int(now), int(now))) posix.lutimes(support.TESTFN, (now, now)) + posix.lutimes(support.TESTFN) @unittest.skipUnless(hasattr(posix, 'futimens'), "test needs posix.futimens()") def test_futimens(self): @@ -263,6 +265,7 @@ class PosixTester(unittest.TestCase): self.assertRaises(TypeError, posix.futimens, fd, None, (now, 0)) posix.futimens(fd, (int(now), int((now - int(now)) * 1e9)), (int(now), int((now - int(now)) * 1e9))) + posix.futimens(fd) finally: os.close(fd) @@ -691,6 +694,7 @@ class PosixTester(unittest.TestCase): try: now = time.time() posix.futimesat(f, support.TESTFN, None) + posix.futimesat(f, support.TESTFN) self.assertRaises(TypeError, posix.futimesat, f, support.TESTFN, (None, None)) self.assertRaises(TypeError, posix.futimesat, f, support.TESTFN, (now, None)) self.assertRaises(TypeError, posix.futimesat, f, support.TESTFN, (None, now)) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 5ca9e95..5ae92fe 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3534,10 +3534,10 @@ extract_time(PyObject *t, time_t* sec, long* usec) } PyDoc_STRVAR(posix_utime__doc__, -"utime(path, (atime, mtime))\n\ -utime(path, None)\n\n\ -Set the access and modified time of the file to the given values. If the\n\ -second form is used, set the access and modified times to the current time."); +"utime(path[, (atime, mtime)])\n\ +Set the access and modified time of the file to the given values.\n\ +If no second argument is used, set the access and modified times to\n\ +the current time."); static PyObject * posix_utime(PyObject *self, PyObject *args) @@ -3706,21 +3706,20 @@ done: #ifdef HAVE_FUTIMES PyDoc_STRVAR(posix_futimes__doc__, -"futimes(fd, (atime, mtime))\n\ -futimes(fd, None)\n\n\ +"futimes(fd[, (atime, mtime)])\n\ Set the access and modified time of the file specified by the file\n\ -descriptor fd to the given values. If the second form is used, set the\n\ +descriptor fd to the given values. If no second argument is used, set the\n\ access and modified times to the current time."); static PyObject * posix_futimes(PyObject *self, PyObject *args) { int res, fd; - PyObject* arg; + PyObject* arg = Py_None; time_t atime, mtime; long ausec, musec; - if (!PyArg_ParseTuple(args, "iO:futimes", &fd, &arg)) + if (!PyArg_ParseTuple(args, "i|O:futimes", &fd, &arg)) return NULL; if (arg == Py_None) { @@ -3771,20 +3770,20 @@ posix_futimes(PyObject *self, PyObject *args) #ifdef HAVE_LUTIMES PyDoc_STRVAR(posix_lutimes__doc__, -"lutimes(path, (atime, mtime))\n\ -lutimes(path, None)\n\n\ +"lutimes(path[, (atime, mtime)])\n\ Like utime(), but if path is a symbolic link, it is not dereferenced."); static PyObject * posix_lutimes(PyObject *self, PyObject *args) { - PyObject *opath, *arg; + PyObject *opath; + PyObject *arg = Py_None; const char *path; int res; time_t atime, mtime; long ausec, musec; - if (!PyArg_ParseTuple(args, "O&O:lutimes", + if (!PyArg_ParseTuple(args, "O&|O:lutimes", PyUnicode_FSConverter, &opath, &arg)) return NULL; path = PyBytes_AsString(opath); @@ -3840,11 +3839,10 @@ posix_lutimes(PyObject *self, PyObject *args) #ifdef HAVE_FUTIMENS PyDoc_STRVAR(posix_futimens__doc__, -"futimens(fd, (atime_sec, atime_nsec), (mtime_sec, mtime_nsec))\n\ -futimens(fd, None, None)\n\n\ +"futimens(fd[, (atime_sec, atime_nsec), (mtime_sec, mtime_nsec)])\n\ Updates the timestamps of a file specified by the file descriptor fd, with\n\ nanosecond precision.\n\ -The second form sets atime and mtime to the current time.\n\ +If no second argument is given, set atime and mtime to the current time.\n\ If *_nsec is specified as UTIME_NOW, the timestamp is updated to the\n\ current time.\n\ If *_nsec is specified as UTIME_OMIT, the timestamp is not updated."); @@ -3853,10 +3851,11 @@ static PyObject * posix_futimens(PyObject *self, PyObject *args) { int res, fd; - PyObject *atime, *mtime; + PyObject *atime = Py_None; + PyObject *mtime = Py_None; struct timespec buf[2]; - if (!PyArg_ParseTuple(args, "iOO:futimens", + if (!PyArg_ParseTuple(args, "i|OO:futimens", &fd, &atime, &mtime)) return NULL; if (atime == Py_None && mtime == Py_None) { -- cgit v0.12