This was previously done, but was lost when the function was updated to
list all Windows mount points, not just drive letters.
Fixes: 04a5b072940cc ("Cygwin: expose all windows volume mount points.")
Signed-off-by: Jeremy Drake <[email protected]>
---
winsup/cygwin/local_includes/mount.h | 3 ++-
winsup/cygwin/mount.cc | 23 +++++++++++++++++------
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/winsup/cygwin/local_includes/mount.h
b/winsup/cygwin/local_includes/mount.h
index 3049de8ba3..b719d98359 100644
--- a/winsup/cygwin/local_includes/mount.h
+++ b/winsup/cygwin/local_includes/mount.h
@@ -23,6 +23,7 @@ enum disk_type
DT_SHARE_NFS
};
+disk_type get_device_type (LPCWSTR);
disk_type get_disk_type (LPCWSTR);
/* Don't add new fs types without adding them to fs_names in mount.cc!
@@ -236,7 +237,7 @@ class dos_drive_mappings
mapping::dosmount *cur_dos;
public:
- dos_drive_mappings ();
+ dos_drive_mappings (bool with_floppies = true);
~dos_drive_mappings ();
wchar_t *fixup_if_match (wchar_t *path);
const wchar_t *next_dos_mount ();
diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc
index ab07c5abef..c921c7691c 100644
--- a/winsup/cygwin/mount.cc
+++ b/winsup/cygwin/mount.cc
@@ -1746,7 +1746,7 @@ mount_info::cygdrive_getmntent ()
char *win32_path, *posix_path;
if (!_my_tls.locals.drivemappings)
- _my_tls.locals.drivemappings = new dos_drive_mappings ();
+ _my_tls.locals.drivemappings = new dos_drive_mappings (false);
wide_path = _my_tls.locals.drivemappings->next_dos_mount ();
if (wide_path)
@@ -1899,11 +1899,9 @@ cygwin_umount (const char *path, unsigned flags)
#define is_dev(d,s) wcsncmp((d),(s),sizeof(s) - 1)
disk_type
-get_disk_type (LPCWSTR dos)
+get_device_type (LPCWSTR dev)
{
- WCHAR dev[MAX_PATH], *d = dev;
- if (!QueryDosDeviceW (dos, dev, MAX_PATH))
- return DT_NODISK;
+ const WCHAR *d = dev;
if (is_dev (dev, L"\\Device\\"))
{
d += 8;
@@ -1934,6 +1932,15 @@ get_disk_type (LPCWSTR dos)
return DT_NODISK;
}
+disk_type
+get_disk_type (LPCWSTR dos)
+{
+ WCHAR dev[MAX_PATH];
+ if (!QueryDosDeviceW (dos, dev, MAX_PATH))
+ return DT_NODISK;
+ return get_device_type (dev);
+}
+
extern "C" FILE *
setmntent (const char *filep, const char *)
{
@@ -2020,7 +2027,7 @@ resolve_dos_device (const wchar_t *dosname, wchar_t
*devpath)
return false;
}
-dos_drive_mappings::dos_drive_mappings ()
+dos_drive_mappings::dos_drive_mappings (bool with_floppies)
: mappings(0)
, cur_mapping(0)
, cur_dos(0)
@@ -2044,6 +2051,8 @@ dos_drive_mappings::dos_drive_mappings ()
mount[--len] = L'\0'; /* Drop trailing backslash */
if (resolve_dos_device (mount, devpath))
{
+ if (!with_floppies && get_device_type (devpath) == DT_FLOPPY)
+ continue;
mapping *m = new mapping ();
if (m)
{
@@ -2088,6 +2097,8 @@ dos_drive_mappings::dos_drive_mappings ()
*wcsrchr (vol, L'\\') = L'\0';
if (resolve_dos_device (vol + 4, devpath))
{
+ if (!with_floppies && get_device_type (devpath) == DT_FLOPPY)
+ continue;
mapping *m = new mapping ();
bool hadrootmount = false;
if (m)
--
2.48.1.windows.1