fileinfo: make UNIX_IS_MOUNTPOINT be TRUE for /

The previously implementation considered a file to be a mountpoint if
its parent is on a different device. / is its own parent, so by this
definition it is not a mountpoint.

But / is (generally) listed in fstab, and fstab(5) defines the
directories it contains to be mountpoints. This attribute should follow
that definition (and reasonable expectation): the root directory is a
mountpoint.

So, add a special-case for the case where the file's parent has the same
st_dev and st_ino as the file, which is true only at the root.

Test this attribute at / (only on POSIX), /proc (but only on Linux), and
at many files and directories created by the test suite (which cannot be
mountpoints).
This commit is contained in:
Will Thompson
2018-06-01 15:43:27 +01:00
parent e0f82b9494
commit 0c5f084200
4 changed files with 54 additions and 2 deletions

View File

@@ -644,7 +644,8 @@ typedef struct _GFileInfoClass GFileInfoClass;
*
* A key in the "unix" namespace for checking if the file represents a
* UNIX mount point. This attribute is %TRUE if the file is a UNIX mount
* point. This attribute is only available for UNIX file systems.
* point. Since 2.58, `/` is considered to be a mount point.
* This attribute is only available for UNIX file systems.
* Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
**/
#define G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT "unix::is-mountpoint" /* boolean */