components/mc/patches/infopanel-follow-symlinks.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Wed, 30 Mar 2016 10:07:29 -0700
changeset 5679 d91b8121bb2a
parent 5369 f78fddfac74d
child 6151 af11d2e6712a
permissions -rw-r--r--
Sync with build 96.1.

Upstream bugID: #3278
Synopsis: Info panel should follow symlinks
Bug record: https://www.midnight-commander.org/ticket/3278

diff -Naur mc-4.8.15.orig/src/filemanager/mountlist.c mc-4.8.15/src/filemanager/mountlist.c
--- mc-4.8.15.orig/src/filemanager/mountlist.c	2015-11-06 10:11:09.000000000 +0100
+++ mc-4.8.15/src/filemanager/mountlist.c	2015-11-13 10:04:32.267994401 +0100
@@ -1704,11 +1704,15 @@
 my_statfs (struct my_statfs *myfs_stats, const char *path)
 {
 #ifdef HAVE_INFOMOUNT_LIST
+    const char *rpath;
     size_t len = 0;
     struct mount_entry *entry = NULL;
     GSList *temp;
     struct fs_usage fs_use;
 
+    if ((rpath = realpath(path, NULL)) == NULL)
+        rpath = path;
+
     for (temp = mc_mount_list; temp != NULL; temp = g_slist_next (temp))
     {
         struct mount_entry *me;
@@ -1716,8 +1720,8 @@
 
         me = (struct mount_entry *) temp->data;
         i = strlen (me->me_mountdir);
-        if (i > len && (strncmp (path, me->me_mountdir, i) == 0) &&
-            (entry == NULL || IS_PATH_SEP (path[i]) || path[i] == '\0'))
+        if (i > len && (strncmp (rpath, me->me_mountdir, i) == 0) &&
+            (entry == NULL || IS_PATH_SEP (rpath[i]) || rpath[i] == '\0'))
         {
             len = i;
             entry = me;
@@ -1727,7 +1731,7 @@
     if (entry != NULL)
     {
         memset (&fs_use, 0, sizeof (struct fs_usage));
-        get_fs_usage (entry->me_mountdir, NULL, &fs_use);
+        get_fs_usage (rpath, NULL, &fs_use);
 
         myfs_stats->type = entry->me_dev;
         myfs_stats->typename = entry->me_type;
@@ -1781,6 +1785,11 @@
         myfs_stats->nfree = 0;
         myfs_stats->nodes = 0;
     }
+
+#ifdef HAVE_INFOMOUNT_LIST
+    if (rpath != path)
+        free((void *) rpath);
+#endif /* HAVE_INFOMOUNT_LIST */
 }
 
 /* --------------------------------------------------------------------------------------------- */