summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivano@gnu.org>2017-12-14 22:46:46 (GMT)
committerFred Drake <fred@fdrake.net>2017-12-14 22:46:46 (GMT)
commit96a5e50a5de3683b2afd6d680c7ecc4b525986f6 (patch)
treef4adb6717deabda9d44a447ce2aa6edc5ea3bb6b
parent2b5fd1e9ca9318673989e6ccac2c8acadc3809cd (diff)
downloadcpython-96a5e50a5de3683b2afd6d680c7ecc4b525986f6.zip
cpython-96a5e50a5de3683b2afd6d680c7ecc4b525986f6.tar.gz
cpython-96a5e50a5de3683b2afd6d680c7ecc4b525986f6.tar.bz2
bpo-32143: add f_fsid to os.statvfs() (#4571)
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r--Doc/library/os.rst5
-rw-r--r--Lib/test/test_os.py5
-rw-r--r--Misc/NEWS.d/next/Library/2017-11-26-17-28-26.bpo-32143.o7YdXL.rst1
-rw-r--r--Modules/posixmodule.c2
4 files changed, 12 insertions, 1 deletions
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 95c8113..a24934c 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -2436,7 +2436,7 @@ features:
correspond to the members of the :c:type:`statvfs` structure, namely:
:attr:`f_bsize`, :attr:`f_frsize`, :attr:`f_blocks`, :attr:`f_bfree`,
:attr:`f_bavail`, :attr:`f_files`, :attr:`f_ffree`, :attr:`f_favail`,
- :attr:`f_flag`, :attr:`f_namemax`.
+ :attr:`f_flag`, :attr:`f_namemax`, :attr:`f_fsid`.
Two module-level constants are defined for the :attr:`f_flag` attribute's
bit-flags: if :const:`ST_RDONLY` is set, the filesystem is mounted
@@ -2471,6 +2471,9 @@ features:
.. versionchanged:: 3.6
Accepts a :term:`path-like object`.
+ .. versionadded:: 3.7
+ Added :attr:`f_fsid`.
+
.. data:: supports_dir_fd
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 2241256..f235f80 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -352,6 +352,11 @@ class StatAttributeTests(unittest.TestCase):
for value, member in enumerate(members):
self.assertEqual(getattr(result, 'f_' + member), result[value])
+ self.assertTrue(isinstance(result.f_fsid, int))
+
+ # Test that the size of the tuple doesn't change
+ self.assertEqual(len(result), 10)
+
# Make sure that assignment really fails
try:
result.f_bfree = 1
diff --git a/Misc/NEWS.d/next/Library/2017-11-26-17-28-26.bpo-32143.o7YdXL.rst b/Misc/NEWS.d/next/Library/2017-11-26-17-28-26.bpo-32143.o7YdXL.rst
new file mode 100644
index 0000000..f416ec5
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-11-26-17-28-26.bpo-32143.o7YdXL.rst
@@ -0,0 +1 @@
+os.statvfs() includes the f_fsid field from statvfs(2)
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index fb879e3..448d4b7 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1860,6 +1860,7 @@ static PyStructSequence_Field statvfs_result_fields[] = {
{"f_favail", },
{"f_flag", },
{"f_namemax",},
+ {"f_fsid", },
{0}
};
@@ -9324,6 +9325,7 @@ _pystatvfs_fromstructstatvfs(struct statvfs st) {
PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag));
PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax));
#endif
+ PyStructSequence_SET_ITEM(v, 10, PyLong_FromUnsignedLong(st.f_fsid));
if (PyErr_Occurred()) {
Py_DECREF(v);
return NULL;