Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2012-04-01 14:38:07 +0400
committerCorinna Vinschen <corinna@vinschen.de>2012-04-01 14:38:07 +0400
commitc4ee9311c2c8cd01cadaa411900d284ba0fd2bdb (patch)
treed097fb1ea4e28c360b254404ccb376f0410a2a45 /winsup/cygwin/fhandler_dev.cc
parent727a81f4d93f3715d3692685915f99fca5106a8a (diff)
* fhandler_dev.cc (fhandler_dev::readdir): Fix formatting. Simplify
code. Use device::type() to fetch dirent compatible device type. Add comment.
Diffstat (limited to 'winsup/cygwin/fhandler_dev.cc')
-rw-r--r--winsup/cygwin/fhandler_dev.cc60
1 files changed, 19 insertions, 41 deletions
diff --git a/winsup/cygwin/fhandler_dev.cc b/winsup/cygwin/fhandler_dev.cc
index d4a3e0c86..938e27db3 100644
--- a/winsup/cygwin/fhandler_dev.cc
+++ b/winsup/cygwin/fhandler_dev.cc
@@ -94,6 +94,7 @@ int
fhandler_dev::readdir (DIR *dir, dirent *de)
{
int ret;
+ const device *curdev;
device dev;
if (!devidx)
@@ -104,62 +105,39 @@ fhandler_dev::readdir (DIR *dir, dirent *de)
/dev already, for instance by using the old script from Igor
Peshansky. */
dev.name = de->d_name;
- if (!bsearch (&dev, dev_storage_scan_start, dev_storage_size, sizeof dev,
- device_cmp))
+ if (!bsearch (&dev, dev_storage_scan_start, dev_storage_size,
+ sizeof dev, device_cmp))
break;
}
- if (ret == ENMFILE)
- devidx = dev_storage_scan_start;
- else
+ if (ret != ENMFILE)
goto out;
+ devidx = dev_storage_scan_start;
}
/* Now start processing our internal dev table. */
ret = ENMFILE;
- while (devidx < dev_storage_end)
+ while ((curdev = devidx++) < dev_storage_end)
{
- const device& thisdev = *devidx++;
/* If exists returns < 0 it means that the device can be used by a
program but its use is deprecated and, so, it is not returned
by readdir((). */
- if (thisdev.exists () <= 0)
+ if (curdev->exists () <= 0)
continue;
++dir->__d_position;
- strcpy (de->d_name, thisdev.name + dev_prefix_len);
- de->d_ino = hash_path_name (0, thisdev.native);
- switch (thisdev.get_major ())
+ strcpy (de->d_name, curdev->name + dev_prefix_len);
+ if (curdev->get_major () == DEV_TTY_MAJOR
+ && (curdev->is_device (FH_CONIN)
+ || curdev->is_device (FH_CONOUT)
+ || curdev->is_device (FH_CONSOLE)))
{
- case DEV_FLOPPY_MAJOR:
- case DEV_TAPE_MAJOR:
- case DEV_CDROM_MAJOR:
- case DEV_SD_MAJOR:
- case DEV_SD1_MAJOR:
- case DEV_SD2_MAJOR:
- case DEV_SD3_MAJOR:
- case DEV_SD4_MAJOR:
- case DEV_SD5_MAJOR:
- case DEV_SD6_MAJOR:
- case DEV_SD7_MAJOR:
- de->d_type = DT_BLK;
- break;
- case DEV_TTY_MAJOR:
- {
- int devn = *const_cast<device *> (&thisdev);
- switch (devn)
- {
- case FH_CONIN:
- case FH_CONOUT:
- case FH_CONSOLE:
- dev.parse (myself->ctty);
- de->d_ino = hash_path_name (0, dev.native);
- break;
- }
- }
- /*FALLTHRU*/
- default:
- de->d_type = DT_CHR;
- break;
+ /* Make sure conin, conout, and console have the same inode number
+ as the current consX. */
+ dev.parse (myself->ctty);
+ de->d_ino = hash_path_name (0, dev.native);
}
+ else
+ de->d_ino = hash_path_name (0, curdev->native);
+ de->d_type = curdev->type ();
ret = 0;
break;
}