* include/sys/dirent.h (struct __DIR): Rename __d_unused to
__d_internal. * fhandler_disk_file.cc (struct __DIR_cache): Remove useless "typedef". (d_dirname): Remove useless "struct". (d_cachepos): Ditto. (d_cache): Ditto. (class __DIR_mounts): New class, implementing mount point tracking for readdir. (d_mounts): New macro for easy access to __DIR_mounts structure. (fhandler_disk_file::opendir): Allocate __DIR_mounts structure and let __d_internal element of dir point to it. (fhandler_disk_file::readdir_helper): Add mount points in the current directory, which don't have a real directory backing them. Don't generate an inode number for /dev. Add comment, why. (fhandler_disk_file::readdir): Move filling fname to an earlier point. Check if current entry is a mount point and evaluate correct inode number for it. (fhandler_disk_file::readdir_9x): Ditto. (fhandler_disk_file::rewinddir): Set all mount points in this directory to "not found" so that they are listed again after calling rewinddir(). (fhandler_disk_file::closedir): Deallocate __DIR_mounts structure. * path.cc (mount_info::get_mounts_here): New method to evaluate a list of mount points in a given parent directory. * shared_info.h (class mount_info): Declare get_mounts_here.
This commit is contained in:
@ -1718,6 +1718,30 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst, device& dev,
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
mount_info::get_mounts_here (const char *parent_dir, int parent_dir_len,
|
||||
char **mount_points)
|
||||
{
|
||||
int n_mounts = 0;
|
||||
|
||||
for (int i = 0; i < nmounts; i++)
|
||||
{
|
||||
mount_item *mi = mount + posix_sorted[i];
|
||||
char *last_slash = strrchr (mi->posix_path, '/');
|
||||
if (!last_slash)
|
||||
continue;
|
||||
if (last_slash == mi->posix_path)
|
||||
{
|
||||
if (parent_dir_len == 1 && mi->posix_pathlen > 1)
|
||||
mount_points[n_mounts++] = last_slash + 1;
|
||||
}
|
||||
else if (parent_dir_len == last_slash - mi->posix_path
|
||||
&& strncasematch (parent_dir, mi->posix_path, parent_dir_len))
|
||||
mount_points[n_mounts++] = last_slash + 1;
|
||||
}
|
||||
return n_mounts;
|
||||
}
|
||||
|
||||
/* cygdrive_posix_path: Build POSIX path used as the
|
||||
mount point for cygdrives created when there is no other way to
|
||||
obtain a POSIX path from a Win32 one. */
|
||||
|
Reference in New Issue
Block a user