diff options
author | Ondrej Holy <oholy@redhat.com> | 2016-09-16 15:31:12 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2016-10-14 11:13:35 +0200 |
commit | 6c0adcce5a3f5b784e198ce9cf2af6aaa540a264 (patch) | |
tree | ee43b5b84258a223b99edbce9b1e973504b6d6e1 | |
parent | f9980674a83901bfb679e94e2ca596822407febc (diff) | |
download | gvfs-6c0adcce5a3f5b784e198ce9cf2af6aaa540a264.tar.gz |
trash: Correctly determine fs type for paths with symlinks
If, for example, "/home" is a symlink to "/mnt/home", and the users's $HOME
is "/home/user", then the code won't correctly recognize unix mount, because
it just walks up the path removing trailing components. Consequently, "/" is
used to determine filesystem type instead of "/mnt/home". It will cause
problems if "/mnt/home" is e.g. NFS, which is handled differently than local
filesystem.
It uses newly added g_unix_mount_for. Bump GLib dependency accordingly.
https://bugzilla.gnome.org/show_bug.cgi?id=771431
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | daemon/trashlib/trashwatcher.c | 17 |
2 files changed, 2 insertions, 17 deletions
diff --git a/configure.ac b/configure.ac index 43b60873..8939be86 100644 --- a/configure.ac +++ b/configure.ac @@ -61,7 +61,7 @@ GTK_DOC_CHECK DISTCHECK_CONFIGURE_FLAGS="--enable-gtk-doc" AC_SUBST(DISTCHECK_CONFIGURE_FLAGS) -PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.49.4 gobject-2.0 gmodule-no-export-2.0 gio-unix-2.0 gio-2.0]) +PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.51.0 gobject-2.0 gmodule-no-export-2.0 gio-unix-2.0 gio-2.0]) PKG_CHECK_MODULES([DBUS], [dbus-1]) diff --git a/daemon/trashlib/trashwatcher.c b/daemon/trashlib/trashwatcher.c index f1196a3f..5520eb57 100644 --- a/daemon/trashlib/trashwatcher.c +++ b/daemon/trashlib/trashwatcher.c @@ -95,22 +95,7 @@ find_mount_entry_for_file (GFile *file) char *pathname; pathname = g_file_get_path (file); - do - { - char *slash; - - slash = strrchr (pathname, '/'); - - /* leave the leading '/' in place */ - if (slash == pathname) - slash++; - - *slash = '\0'; - - entry = g_unix_mount_at (pathname, NULL); - } - while (entry == NULL && pathname[1]); - + entry = g_unix_mount_for (pathname, NULL); g_free (pathname); /* if the GUnixMount stuff is gummed up, this might fail. we can't |