1
1

* vfs.c: Rename mc_return_cwd() to _vfs_get_cwd(). Move

related functions closer to each other, add comments.
Этот коммит содержится в:
Pavel Roskin 2003-06-06 00:50:22 +00:00
родитель 68183f4727
Коммит ab84c14503
2 изменённых файлов: 40 добавлений и 29 удалений

Просмотреть файл

@ -1,5 +1,8 @@
2003-06-05 Pavel Roskin <proski@gnu.org>
* vfs.c: Rename mc_return_cwd() to _vfs_get_cwd(). Move
related functions closer to each other, add comments.
* ftpfs.c (ftpfs_done): New function. Free ftpfs_proxy_host and
ftpfs_anonymous_passwd.

Просмотреть файл

@ -603,45 +603,68 @@ int mc_fstat (int handle, struct stat *buf) {
}
/*
* You must g_strdup whatever this function returns.
* Return current directory. If it's local, reread the current directory
* from the OS. You must g_strdup whatever this function returns.
*/
static const char *
mc_return_cwd (void)
_vfs_get_cwd (void)
{
char *p;
struct stat my_stat, my_stat2;
if (!vfs_rosplit (current_dir)){
if (!vfs_rosplit (current_dir)) {
p = g_get_current_dir ();
if (!p) /* One of the directories in the path is not readable */
if (!p) /* One of the directories in the path is not readable */
return current_dir;
/* Otherwise check if it is O.K. to use the current_dir */
if (!cd_symlinks ||
mc_stat (p, &my_stat) ||
mc_stat (current_dir, &my_stat2) ||
my_stat.st_ino != my_stat2.st_ino ||
my_stat.st_dev != my_stat2.st_dev){
if (!cd_symlinks || mc_stat (p, &my_stat)
|| mc_stat (current_dir, &my_stat2)
|| my_stat.st_ino != my_stat2.st_ino
|| my_stat.st_dev != my_stat2.st_dev) {
g_free (current_dir);
current_dir = p;
return p;
} /* Otherwise we return current_dir below */
} /* Otherwise we return current_dir below */
g_free (p);
}
}
return current_dir;
}
static void
vfs_setup_wd (void)
{
current_dir = g_strdup (PATH_SEP_STR);
if (!(vfs_flags & FL_NO_CWDSETUP))
_vfs_get_cwd ();
if (strlen (current_dir) > MC_MAXPATHLEN - 2)
vfs_die ("Current dir too long.\n");
}
/*
* Return current directory. If it's local, reread the current directory
* from the OS. Put directory to the provided buffer.
*/
char *
mc_get_current_wd (char *buffer, int size)
{
const char *cwd = mc_return_cwd();
const char *cwd = _vfs_get_cwd ();
strncpy (buffer, cwd, size - 1);
buffer [size - 1] = 0;
buffer[size - 1] = 0;
return buffer;
}
/*
* Return current directory without any OS calls.
*/
char *
vfs_get_current_dir (void)
{
return current_dir;
}
MC_NAMEOP (chmod, (char *path, int mode), (vfs, path, mode))
MC_NAMEOP (chown, (char *path, int owner, int group), (vfs, path, owner, group))
MC_NAMEOP (utime, (char *path, struct utimbuf *times), (vfs, path, times))
@ -975,21 +998,6 @@ vfs_file_is_smb (char *filename)
return 0;
}
char *vfs_get_current_dir (void)
{
return current_dir;
}
static void vfs_setup_wd (void)
{
current_dir = g_strdup (PATH_SEP_STR);
if (!(vfs_flags & FL_NO_CWDSETUP))
mc_return_cwd();
if (strlen(current_dir)>MC_MAXPATHLEN-2)
vfs_die ("Current dir too long.\n");
}
MC_NAMEOP (mkdir, (char *path, mode_t mode), (vfs, path, mode))
MC_NAMEOP (rmdir, (char *path), (vfs, path))
MC_NAMEOP (mknod, (char *path, int mode, int dev), (vfs, path, mode, dev))