(vfs_setup_cwd): move directory test to separate function.

This commit is contained in:
Andrew Borodin 2016-06-30 11:01:47 +03:00
parent 2abb92d7e6
commit 9f606a6668
1 changed files with 17 additions and 12 deletions

View File

@ -202,6 +202,19 @@ vfs_get_openfile (int handle)
return h;
}
/* --------------------------------------------------------------------------------------------- */
static gboolean
vfs_test_current_dir (const vfs_path_t * vpath)
{
struct stat my_stat, my_stat2;
return (mc_global.vfs.cd_symlinks && mc_stat (vpath, &my_stat) == 0
&& mc_stat (vfs_get_raw_current_dir (), &my_stat2) == 0
&& my_stat.st_ino == my_stat2.st_ino && my_stat.st_dev == my_stat2.st_dev);
}
/* --------------------------------------------------------------------------------------------- */
/*** public functions ****************************************************************************/
/* --------------------------------------------------------------------------------------------- */
@ -554,12 +567,7 @@ vfs_setup_cwd (void)
if (tmp_vpath != NULL)
{
struct stat my_stat, my_stat2;
if (mc_global.vfs.cd_symlinks
&& mc_stat (tmp_vpath, &my_stat) == 0
&& mc_stat (vfs_get_raw_current_dir (), &my_stat2) == 0
&& my_stat.st_ino == my_stat2.st_ino && my_stat.st_dev == my_stat2.st_dev)
if (vfs_test_current_dir (tmp_vpath))
vfs_set_raw_current_dir (tmp_vpath);
else
vfs_path_free (tmp_vpath);
@ -575,14 +583,11 @@ vfs_setup_cwd (void)
g_free (current_dir);
if (tmp_vpath != NULL)
{ /* One of the directories in the path is not readable */
struct stat my_stat, my_stat2;
{
/* One of directories in the path is not readable */
/* Check if it is O.K. to use the current_dir */
if (!(mc_global.vfs.cd_symlinks
&& mc_stat (tmp_vpath, &my_stat) == 0
&& mc_stat (vfs_get_raw_current_dir (), &my_stat2) == 0
&& my_stat.st_ino == my_stat2.st_ino && my_stat.st_dev == my_stat2.st_dev))
if (!vfs_test_current_dir (tmp_vpath))
vfs_set_raw_current_dir (tmp_vpath);
else
vfs_path_free (tmp_vpath);