components/mc/patches/infopanel-follow-symlinks.patch
author Milan Cermak <Milan.Cermak@oracle.com>
Tue, 27 Jan 2015 11:02:10 +0100
branchs11-update
changeset 3691 baec2c9153f9
child 5369 f78fddfac74d
permissions -rw-r--r--
19702624 Update Midnight Commander
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3691
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     1
Upstream bugID: #3278
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     2
Synopsis: Info panel should follow symlinks
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     3
Bug record: https://www.midnight-commander.org/ticket/3278
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     4
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     5
diff -Naur mc-4.8.13.old/src/filemanager/mountlist.c mc-4.8.13.new/src/filemanager/mountlist.c
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     6
--- mc-4.8.13.old/src/filemanager/mountlist.c	2014-09-02 11:23:58.000000000 +0200
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     7
+++ mc-4.8.13.new/src/filemanager/mountlist.c	2014-09-26 17:07:08.135044849 +0200
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     8
@@ -1598,18 +1600,22 @@
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
     9
 my_statfs (struct my_statfs *myfs_stats, const char *path)
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    10
 {
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    11
 #ifdef HAVE_INFOMOUNT_LIST
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    12
+    const char *rpath;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    13
     size_t len = 0;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    14
     struct mount_entry *entry = NULL;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    15
     struct mount_entry *temp = mc_mount_list;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    16
     struct fs_usage fs_use;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    17
 
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    18
+    if ((rpath = realpath(path, NULL)) == NULL)
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    19
+        rpath = path;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    20
+
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    21
     while (temp)
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    22
     {
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    23
         size_t i;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    24
 
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    25
         i = strlen (temp->me_mountdir);
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    26
-        if (i > len && (strncmp (path, temp->me_mountdir, i) == 0))
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    27
-            if (!entry || (path[i] == PATH_SEP || path[i] == '\0'))
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    28
+        if (i > len && (strncmp (rpath, temp->me_mountdir, i) == 0))
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    29
+            if (!entry || (rpath[i] == PATH_SEP || rpath[i] == '\0'))
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    30
             {
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    31
                 len = i;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    32
                 entry = temp;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    33
@@ -1620,7 +1626,7 @@
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    34
     if (entry)
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    35
     {
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    36
         memset (&fs_use, 0, sizeof (struct fs_usage));
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    37
-        get_fs_usage (entry->me_mountdir, NULL, &fs_use);
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    38
+        get_fs_usage (rpath, NULL, &fs_use);
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    39
 
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    40
         myfs_stats->type = entry->me_dev;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    41
         myfs_stats->typename = entry->me_type;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    42
@@ -1672,6 +1678,11 @@
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    43
         myfs_stats->nfree = 0;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    44
         myfs_stats->nodes = 0;
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    45
     }
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    46
+
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    47
+#ifdef HAVE_INFOMOUNT_LIST
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    48
+    if (rpath != path)
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    49
+        free((void *) rpath);
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    50
+#endif /* HAVE_INFOMOUNT_LIST */
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    51
 }
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    52
 
baec2c9153f9 19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff changeset
    53
 /* --------------------------------------------------------------------------------------------- */