author | Milan Cermak <Milan.Cermak@oracle.com> |
Thu, 18 Dec 2014 13:47:34 +0100 | |
changeset 3561 | 8806d147c2d5 |
child 5369 | f78fddfac74d |
permissions | -rw-r--r-- |
3561
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
1 |
Upstream bugID: #3278 |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
2 |
Synopsis: Info panel should follow symlinks |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
3 |
Bug record: https://www.midnight-commander.org/ticket/3278 |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
4 |
|
8806d147c2d5
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 |
8806d147c2d5
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 |
8806d147c2d5
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 |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
8 |
@@ -1598,18 +1600,22 @@ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
9 |
my_statfs (struct my_statfs *myfs_stats, const char *path) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
10 |
{ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
11 |
#ifdef HAVE_INFOMOUNT_LIST |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
12 |
+ const char *rpath; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
13 |
size_t len = 0; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
14 |
struct mount_entry *entry = NULL; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
15 |
struct mount_entry *temp = mc_mount_list; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
16 |
struct fs_usage fs_use; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
17 |
|
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
18 |
+ if ((rpath = realpath(path, NULL)) == NULL) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
19 |
+ rpath = path; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
20 |
+ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
21 |
while (temp) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
22 |
{ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
23 |
size_t i; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
24 |
|
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
25 |
i = strlen (temp->me_mountdir); |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
26 |
- if (i > len && (strncmp (path, temp->me_mountdir, i) == 0)) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
27 |
- if (!entry || (path[i] == PATH_SEP || path[i] == '\0')) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
28 |
+ if (i > len && (strncmp (rpath, temp->me_mountdir, i) == 0)) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
29 |
+ if (!entry || (rpath[i] == PATH_SEP || rpath[i] == '\0')) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
30 |
{ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
31 |
len = i; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
32 |
entry = temp; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
33 |
@@ -1620,7 +1626,7 @@ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
34 |
if (entry) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
35 |
{ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
36 |
memset (&fs_use, 0, sizeof (struct fs_usage)); |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
37 |
- get_fs_usage (entry->me_mountdir, NULL, &fs_use); |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
38 |
+ get_fs_usage (rpath, NULL, &fs_use); |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
39 |
|
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
40 |
myfs_stats->type = entry->me_dev; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
41 |
myfs_stats->typename = entry->me_type; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
42 |
@@ -1672,6 +1678,11 @@ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
43 |
myfs_stats->nfree = 0; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
44 |
myfs_stats->nodes = 0; |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
45 |
} |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
46 |
+ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
47 |
+#ifdef HAVE_INFOMOUNT_LIST |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
48 |
+ if (rpath != path) |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
49 |
+ free((void *) rpath); |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
50 |
+#endif /* HAVE_INFOMOUNT_LIST */ |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
51 |
} |
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
52 |
|
8806d147c2d5
19702624 Update Midnight Commander
Milan Cermak <Milan.Cermak@oracle.com>
parents:
diff
changeset
|
53 |
/* --------------------------------------------------------------------------------------------- */ |